Nginx 시리즈

Nginx 프록시 서버

mayleaf 2020. 4. 4. 21:37

이 글은 Nginx를 프록시 서버로 사용하는 방법을 적은 글입니다.

이 글에서 다루고자 하는 내용은 크게 두 가지로

첫 번째는 Nginx를 리버스 프록시 서버로 운용할 때의 장점이고

두 번째는 Nginx를 리버스 프록시 서버로 운용하는 방법 입니다.

리버스 프록시 서버를 운용하는 장점

첫 번째는 어플리케이션 서버의 정보를 외부에 노출하지 않고 운영할 수 있다는 점이고,

두 번째는 하나의 포트만으로 여러 서버에 접근 할 수 있는 아키텍쳐를 만들 수 있다는 점입니다.

Nginx를 리버스 프록시 서버로 운용하기

우리는 두가지 실습을 진행할 것입니다.

첫 번째는 간단한 Nginx 리버스 프록시 서버를 세팅하는 것이고

두 번째는 Nginx 리버스 프록시 서버에 어플리케이션 서버를 연결하는 것입니다.

 

Beginner’s Guide

Beginner’s Guide This guide gives a basic introduction to nginx and describes some simple tasks that can be done with it. It is supposed that nginx is already installed on the reader’s machine. If it is not, see the Installing nginx page. This guide descri

nginx.org

※첫 번째 내용은 위의 링크를 참조한 내용입니다.

실습을 진행하기에 앞서

nginx는 바이너리 패키지를 통해서 설치되었을 것이라고 가정합니다.

그리고 이 경우 /etc/nginx/ 디렉토리에 설정 파일들이 생성되어 있습니다.

 

또한 설정 파일은 보통 설정파일 디렉토리 안에 conf.d/*.conf 와 같은 형식으로 파일을 관리합니다. 

ex) /etc/nginx/conf.d/proxy.conf

간단한 Nginx 리버스 프록시 서버 만들기

server {
   listen 8080;
   root /data/up1;
   
   location / {
   }
}

위의 server 블록은 간단한 웹 서버 설정을 의미합니다.

이 설정은 모든 리퀘스트를 로컬 파일 시스템(Nginx가 깔려있는 컴퓨터)의 /data/up1 디렉토리로 매핑시켜줍니다. 

그리고 /data/up1 디렉토리 안에 index.html이 있다면 8080 포트에 접근시 index.html을 서빙합니다.

 

이때 주의해야하는 점은 root가 server 블록 안에 바로 있다는 점입니다. 

이렇게 server 블록 안에 root를 바로 쓰는 경우는 location 블록 안에 root 디렉토리가 지정되어있지 않을 때입니다.

 

server {
    location / {
        proxy_pass http://localhost:8080;
    }
}

이번에는 방금 전의 서버 설정에 추가하여 새로운 프록시 서버 설정을 만들었습니다.

location 블록안에 proxy_pass 파라미터 값을 보면 그 전에 만든 웹서버 정보를 넘겨주고 있습니다.

이 설정을 통해서 nginx는 기본 포트로 들어오는 요청을 proxy_pass의 파라미터가 되는 서버로 포워딩합니다.

Nginx 리버스 프록시 서버에 어플리케이션 서버 연결하기

이번에는 방금전에 만든 프록시 서버 세팅을 변경하여 어플리케이션 서버로 리버스 프록싱을 해주는 설정을 만들어보겠습니다.

server {
    listen 80;

    server_name <your_server_name>;
    # set your domain or ip address, default is localhost
    # if the server used for external request, you should set server_name parameter
    
    location / {
        proxy_pass http://localhost:3000;

    }
}

우리가 위해서 만든 프록서 서버 블록을 위 코드와 같이 수정을 하면 서버 호스트 이름의  80번 포트로 들어오는 요청을 3000번 포트로 포워딩합니다.

 

그리고 사진과 같이 어플리케이션 서버에는 로컬호스트(127.0.0.1:3000)에서 어플리케이션 서버에 접근한 것으로 로그가 남습니다. 이는 리버스 프록시를 하며 요청을 보낸 클라이언트 정보가 HTTP header에 남지 않아서 그렇습니다. 

 

server {
    listen 80;
    server_name <your_server_name>;

    location / {

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:3000;

    }
}

그렇기 때문에 위 코드와 같이 설정을 바꿔 header 값을 설정해주면 본래의 클라이언트 정보를 알 수 있습니다.

 

위 사진처럼 코드를 업데이트 한 후에는 어떤 클라이언트가 접근을 했는지 알 수 있습니다.

마무리

이번 글은 nginx를 리버스 프록시 서버로 운용하는 방법에 대해서 다뤘습니다.

 

Nginx를 사용하는데에 필요한 정보들을 시리즈로 적고 있습니다.

궁금하거나, 하고 싶은 말이 있으시면 댓글을 통해서 말해주시길 바랍니다.

 

감사합니다

'Nginx 시리즈' 카테고리의 다른 글

Nginx 로드밸런싱 설정  (1) 2020.04.14
Nginx 란?  (1) 2020.04.02
Nginx 설치  (0) 2020.04.01