전에 올린 글 중에 Nginx의 리버스 프록시를 이용해서 멀티 도메인을 구현했다고 적었다.
이번 글에서 리버스 프록시를 이용해서 구체적으로 어떻게 구현했는지 적어보고자 한다.
내 현재 상황은 웹 서버로 사용할 라즈베리 파이 기기와 기존의 프로젝트를 운영 중인 톰캣 서버 1개이 있고,
추가적으로 개인 포트폴리오 웹사이트를 추가하고자 했다.
그대로 운영한다고 하면 당연히 포트간 충돌이 발생해서 운영이 제대로 안 될게 뻔했다.
그 다음 방법으로 톰캣 서버에 추가적으로 올려서 /로 구분하는건 어떨까 생각도 해봤다.
예를 들자면 exampledomain에 제일 먼저 접속하면 필자의 본인 포트폴리오 사이트가 나오고,
이후에 exampledomain/projectA로 프로젝트 사이트에 연결되는 식이다.
이 방법은 문제는 이미 운영중이던 서비스는 domainA의 /를 기준으로 설정되어있기에, 이를 다 바꿔주어야 한다.
또한 프로젝트 도메인에 접속하더라도, 필자의 포트폴리오 사이트가 먼저 나오는 문제가 예상되었다.
따라서 도커를 이용해서 WAS를 구분짓고, 가장 메인이 되는 Nginx를 외부와 포트를 연결해서 도메인에 따라 각 WAS에 맞게 분배해주는 방법이 적합하다고 판단했다.
도커 컨테이너 구성은 다음과 같다.
도커의 구체적인 구성에 대해서는 이전 글에 대해 참고하길 바란다.
목적 | 이름 | 서비스 |
개인 포트폴리오 사이트 | web | Nginx |
프로젝트 사이트 | project | Tomcat |
프로젝트 사이트 db | project_db | MariaDB |
우선 라즈베리 파이 ip에 할당된 도메인 2개를 준비한다.
(예시에서는 projectA와 personal_site.com으로 하겠다.)
이후에 web 컨테이너에서 /etc/nginx/conf.d/deafult.conf를 수정한다.
기본적으로 아래와 비슷한 형식으로 작성되어 있을 것이다.
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
여기서 가장 중요한 것은 listen, server_name이다.
listen은 nginx에 현재 들어온 HTTP요청이 해당 포트에 들어올 경우에만 처리하겠다는 뜻이다.
위에서는 80번 포트로 들어온 요청만을 처리한다는 뜻이다.
server_name은 HTTP request header에 적혀있는 서버의 이름이다.
따라서 이 서버 이름을 통해서 도메인을 구분할 수 있다.
server {
listen 80;
listen [::]:80;
server_name personal_site.com;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
리버스 프록시는 특정 요청을 Nginx가 받은 이후에, 내부에 다른 WAS에 전달해주는 거라고 생각하면 이해가 쉽다.
Nginx에서 리버스 프록시를 이용하기 위해서는 proxy_pass를 사용하면 된다.
server {
listen 80;
listen [::]:80;
server_name projectA.com;
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
location / {
proxy_pass http://localhost:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
'Web Devlope > WAS' 카테고리의 다른 글
[Windows] NginX 설치 및 .bat 스크립트 (0) | 2022.08.02 |
---|