전에 올린 글 중에 Nginx의 리버스 프록시를 이용해서 멀티 도메인을 구현했다고 적었다.

이번 글에서 리버스 프록시를 이용해서 구체적으로 어떻게 구현했는지 적어보고자 한다.

 


 

내 현재 상황은 웹 서버로 사용할 라즈베리 파이 기기와 기존의 프로젝트를 운영 중인 톰캣 서버 1개이 있고,

추가적으로 개인 포트폴리오 웹사이트를 추가하고자 했다.

 

그대로 운영한다고 하면 당연히 포트간 충돌이 발생해서 운영이 제대로 안 될게 뻔했다.

그 다음 방법으로 톰캣 서버에 추가적으로 올려서 /로 구분하는건 어떨까 생각도 해봤다.

예를 들자면 exampledomain에 제일 먼저 접속하면 필자의 본인 포트폴리오 사이트가 나오고,

이후에 exampledomain/projectA로 프로젝트 사이트에 연결되는 식이다.

 

이 방법은 문제는 이미 운영중이던 서비스는 domainA의 /를 기준으로 설정되어있기에, 이를 다 바꿔주어야 한다.

또한 프로젝트 도메인에 접속하더라도, 필자의 포트폴리오 사이트가 먼저 나오는 문제가 예상되었다.

 

따라서 도커를 이용해서 WAS를 구분짓고, 가장 메인이 되는 Nginx를 외부와 포트를 연결해서 도메인에 따라 각 WAS에 맞게 분배해주는 방법이 적합하다고 판단했다.

 

출처 : ibmimedia

 

도커 컨테이너 구성은 다음과 같다.

도커의 구체적인 구성에 대해서는 이전 글에 대해 참고하길 바란다.

목적 이름 서비스
개인 포트폴리오 사이트 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

+ Recent posts