전에 올린 글 중에 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

우선 구글에 nginx windows를 검색해서 나오는 링크로 들어간다.

 

http://nginx.org/en/download.html

 

nginx: download

 

nginx.org

해당 링크에서 Stable version 중 뒤에 Windows가 붙은 걸로 다운로드 한다.

 

작성일 기준으로 1.22.0이 Stable version이므로 nginx/Windows-1.22.0을 클릭해서 다운로드 받는다.

 

압축을 풀고 원하는 위치로 옮긴다.

 

nginx를 실행하려면 루트 폴더 아래에 있는 nginx.exe를 클릭해서 실행한다.

 

브라우저에서 localhost나 127.0.0.1을 주소창에 입력한다

 

 

위와 같은 화면이 나오면 설치는 끝이다.

 

nginx는 cmd에서도 실행이 가능한데, 자세한 옵션은 아래 링크에 있다.

 

http://nginx.org/en/docs/windows.html

 

nginx for Windows

nginx for Windows Version of nginx for Windows uses the native Win32 API (not the Cygwin emulation layer). Only the select() and poll() (1.15.9) connection processing methods are currently used, so high performance and scalability should not be expected. D

nginx.org

 

\nginx 설치경로\nginx.exe -s start
  • \nginx 설치경로\nginx.exe -s start 는 nginx를 실행한다.
\nginx 설치경로\nginx.exe -s quit
  • \nginx 설치경로\nginx.exe -s quit은 nginx를 중지한다.

 

설치는 했는데, 매번 이렇게 실행하는 것도 번거로운 것 같아서 .bat 스크립트를 찾았는데, 조금 수정해봤다.

원본 스크립트는 아래 링크에 있다.

https://steemit.com/steemcodeit/@ektorcaba/start-stop-bat-script-to-nginx-for-windwos-from-steemcodeitcom

 

우선 실행이다.

 

start.bat

@ECHO OFF
ECHO Starting NGINX
start nginx.exe

popd

:loop
goto loop

cmd 창이 바로 사라지면 켜졌는지 알 수 가 없어서, 계속 켜져있게 루프 옵션을 주었다.

 

quit.bat

@ECHO OFF
nginx.exe -s quit

taskkill /f /IM php-cgi.exe
taskkill /f /IM cmd.exe
EXIT

quit을 실행하면 실행하던 start.bat 창도 같이 종료되게끔 했다.

 

reload.bat

@ECHO OFF
ECHO Starting NGINX
start nginx.exe -s reload

EXIT /b

reload는 필요할진 모르겠지만, 일단 만들어 두었다.

 

이제 해당 스크립트를 nginx 루트 폴더에 두고, 바탕화면에 바로가기하면 훨씬 편하게 쓸 수 있다.

'Web Devlope > WAS' 카테고리의 다른 글

[Nginx] 리버스 프록시를 이용한 멀티 도메인 구현  (0) 2022.08.15

+ Recent posts