Nginx Reverse Proxy 사용하기

Jeongkuk Seo
sjk5766
Published in
5 min readSep 9, 2018

호주로 해외여행을 간다고 생각해보자. 중국을 경유하여 가는 비행기 티켓을 구매했다. Proxy랑 엮어보면 인천공항은 출발지, 중국은 Proxy가 되며 호주가 실제 목적지가 된다. Proxy 서버란, 중계 서버이다.

기업에서 사용하는 Proxy 환경에는 크게 두 가지가 있다.

1. 순방향 Proxy (Forward Proxy)

기업 내부망 PC or 서버들이 인터넷에 접속할 때, 먼저 Proxy 서버를 거쳐서 인터넷에 연결되는 방식이다. 순방향 Prxoy로 크게 두 가지 장점을 얻을 수 있다.

  1. 보안 : Proxy Server에서 In/Out bound 패킷에 대한 보안 정책(Content filtering 등)을 적용할 수 있다.
  2. 성능 : Proxy Server는 내부에 Cache를 유지하며 이미 한번 통신한 외부 서버의 이미지, 파일, 그 외정보들을 저장할 수 있다. 내부 사용자가 원격 서버에 접속 시, cache에 데이터가 있으면 물리적으로 먼 곳까지 갈 필요없이 Proxy 서버가 데이터를 제공하여 빠른 통신을 지원한다.
순방향 Proxy 구조

2.역방향 Proxy (Reverse Proxy)

외부에서 내부 서버가 제공하는 서비스 접근 시, Proxy 서버를 먼저 거쳐서 내부 서버로 들어오는 방식이다. Reverse Proxy 사용으로 얻는 장점은 크게 아래와 같다.

  1. 보안 : 외부 사용자는 실제 내부망에 있는 서버의 존재를 모른다. 모든 접속은 Reverse Proxy 서버에게 들어오며, Reverse Proxy는 요청에 맵핑되는 내부 서버의 정보를 알고 요청을 넘겨준다. 따라서 내부 서버의 정보를 외부로부터 숨길 수 있다.
  2. 로드밸런싱 : Proxy 서버가 내부 서버의 정보를 알고 있으므로 로드밸런싱을 통해 부하 여부에 따라 요청을 분배 할 수 있다.
Reverse Proxy 구조

자, 그럼 NGINX에서 Reverse Proxy를 구성하고 테스트를 해보자

CentOS 6 에서 Nginx를 설치하였으며 설치방법은 아래를 참조하면 된다.

Nginx가 설치되었다면 /etc/nginx 경로 아래에 nginx.conf 파일을 열어보자. 파일 내용 중 아래와 같은 코드가 있다.

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

/etc/nginx/conf.d 폴더 아래에 있는 .conf 파일을 include 한다는 말인데 그 경로의 default.conf 파일의 내용을 다 지우고 아래와 같이 작성했다. (Focus를 Reverse Proxy 테스트에만 맞춰 간단하게 작성하였다.)

#
# The default server
#
server {
listen 80;
location / {
proxy_pass http://127.0.0.1:3000/proxy_1;
}
location /test {
proxy_pass http://127.0.0.1:3000/proxy_2;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}

위에서 굵게 표시한 부분을 보자. location은 Proxy 서버로 들어오는 요청 URL에 따라 맵핑된다. 가령 http://Proxy서버IP:80 으로 들어오면 location / 에 해당된다. http://Proxy서버IP:80/test 로 요청이 들어올 경우 location /test에 맵핑된다.proxy_pass들어온 요청을 어디로 포워딩 해주는지 지정한다.

다음은 Proxy 서버가 포워딩 할 뒷 단의 node express 서버 소스이다. 필요한 일부 소스만 정리하면 아래와 같다.

Node Express 서버는 3000번 포트를 open 하며 proxy_1, proxy_2 요청이 들어올 경우 응답 값을 전송하는 걸 알 수 있다.

자, 테스트 하기 전 아까 위에서 nginx 관련 설정을 바꾸었으니 재 기동한다.

/etc/init.d/nginx restart

Reverse Proxy가 설정되어 있지 않다면, Node 서버와 통신하기 위해 3000번 포트로만 접속해야 한다. 하지만 위에서 Reverse Proxy 설정을 하였으니 80번 포트로 접속해도 Node로 포워딩 될 것이다. 확인해보자. 아래 그림은 크롬에서 80번 포트로 접속한 화면이다. 정상적으로 응답을 받은 걸 확인하였다.

Reverse Proxy를 통한 Node 서버 응답 수신

--

--