
하나의 AWS EC2 인스턴스에 여러 서비스를 띄우고 base url 뒤에 붙어서 들어오는 path로 서비스를 분기하도록 하려고 Nginx를 사용했다.
base_url/path1 --> port 3000번에 띄워진 서비스에 접근
base_url/path2 --> port 3001번에 띄워진 서비스에 접근
base_url/path3 --> port 3002번에 띄워진 서비스에 접근
1. Nginx default 파일 접근
$ sudo vi /etc/nginx/sites-available/default
2. location 블럭 수정
default 파일을 보면 location / 이 정의되어있는 부분이 있다. 이 부분을 다음과 같이 path와 서비스 주소에 맞게 수정해주면 된다.
location /path1/ {
proxy_pass http://127.0.0.1:3000;
rewrite ^/path1/(.*)$ /$1 break;
}
location /path2/ {
proxy_pass http://127.0.0.1:3001;
rewrite ^/path2/(.*)$ /$1 break;
}
location /path3/ {
proxy_pass http://127.0.0.1:3002;
rewrite ^/path3/(.*)$ /$1 break;
}
location / {
# ...
}
proxy_pass는 전달하는 데 쓰는걸 알겠는데, 그럼 그 아래에 작성한 rewrite 구문은 무엇일까?
만약 내가 접근하고 싶은 주소가 http://127.0.0.1:3000/write인데, 그러기 위해서 http://sample.com/path1/write로 접근을 하면 http://127.0.0.1:3000/path1/write로 전달이 되기 때문에 /path1로 시작하는 api가 선언되어있지 않으면 404 Not Found가 뜨기 때문이다.
그러기 위해서 실제로 3000번 포트에 있는 서비스에 path를 전달할 때는 /path1 부분을 제외하고 전달해줘야 하는데, 그 때를 위한 것이 rewrite이다.
rewrite 구문 해석
예시 구문: rewrite ^/path1/(.*)$ /$1
- ^: path로 들어온 문자열의 시작임을 표시
- .*: 남은 문자열 전부
- Dot(.): 줄바꿈 문자(\n)을 제외한 모든 문자
- *: 0번부터 무한대로 반복
- $: path로 들어온 문자열의 마지막임을 표시
- $1: (.*) 부분에 들어가있는 문자열
즉, ^/path1/(.*)$ /$1은 path로 들어온 문자열에서 /path1/을 제외한 나머지 문자열을 사용하겠다는 것으로 해석할 수 있다.
http://sample.com/path1/write/something이 호출된다면
rewrite /path1/write/something /write/something이 만들어지면서 http://127.0.0.1:3000/write/something으로 접근을 하게 된다.
'Linux' 카테고리의 다른 글
| Nginx HTTPS SSL 설정하기(Nginx, Let's Encrypt, EC2) (0) | 2024.09.03 |
|---|---|
| [Ubuntu] timezone 변경하기 (0) | 2024.09.01 |
| Ubuntu에 Node/npm 설치하기 (0) | 2024.07.08 |
| Linux 실시간 로그 보기: tail 명령어 (0) | 2024.07.08 |
