개발일기

Nginx - Reverse Proxy 설정 및 요소 이해하기 본문

Web Server/Nginx

Nginx - Reverse Proxy 설정 및 요소 이해하기

Flashback 2021. 11. 3. 16:04
728x90
반응형

0. reverse proxy란?

기본 nginx 설정 파일을 보면 URL 경로가 /로 시작하여 들어오는 경우, root에 지정된 경로에 따라 일치하는 파일로 이동하여 웹에서 보여준다. 하지만 reverse proxy를 서버 블록에 적용하면  URL 경로와 적합한 서버블록을 찾은 후 해당 서버블록의 정보의 proxy_pass에 따른 내용을 보여준다. reverse_proxy를 통해 9000번 포트를 통해 접속해야 볼 수 있는 화면도 80번 포트에 접속했을 때 확인할 수 있도록 설정을 변경할 수 있다.

 

 

1. reverse_proxy의 장점

  • 보안

nginx에 reverse_proxy를 통해 접근하도록 설정하면 해당 서버에 접속하는 클라이언트와 서버 IP 모두들 숨길 수 있게 된다. 제공하는 프록시 서버의 IP만 공개함으로써 해킹에 대한 대비를 할 수 있다. 또한 만얀, 해킹을 당하더라고 중요한 정보가 담겨져 있는 DB서버와 캐시 서버 등의 기존 서버에 대한 해킹을 방지할 수 있다.

 

  • 서버 성능

성능면에서도 우위를 점할 수 있다. 프록시 서버를 사용하여 캐싱 기능과 트래픽 분산 기능을 결합시켜 전반적인 서버 성능의 향상을 도모할 수 있다.

 

  • 트래픽 분산 - 로드 밸런싱

몇몇 프록시 서버는 트래픽 분산 기능을 제공한다. 이 중에서 nginx도 포함된다. 한 서버에 트래픽이 과도하게 몰릴 경우 해당 서버가 버티지 못하는 경우도 종종 발생한다. 이러한 경우를 방지하고자 nginx는 지정된 프록시 서버에 트래픽을 분산시켜 트래픽이 과중하게 몰리는 경우를 미연하게 방지한다.

 

 

nginx를 기본으로 설치하면 해당 내용의 기본 설정이 적용되어 서버가 동작하게 된다.

# nginx의 기본 server 블록 설정
# /etc/nginx/conf.d/default.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

 

 

2. 간단한 reverse proxy 설정

reverse proxy 기능을 활용하기 위해 서버 블록안에 proxy_pass 등의 옵션을 추가하여 reverse proxy 설정을 진행할 수 있다.

# reverse proxy를 적용한 nginx의 server 블록 설정
# /etc/nginx/conf.d/default.conf

server {
	
     listen 80;

	 ...
    
     location ^~ /api {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
     }
    
     ...
    
}

 

 

3. nginx reverse_proxy의 핵심요소

location ^~ /api {
    proxy_pass http://localhost:9000;
}

proxy_pass : 가장 핵심적인 부분이다.

URL이 api로 시작하는 주소로 접근하면 localhost:9000으로 보내준다는 뜻이다. 사용자가 9000번 포트로 접근하지 않고 80번 포트로 접근하여도 api를 맨 앞에 포함한 경로로 접근하면 80번 포트로 접근한 것과 같은 상황이 발생하도록 한다.

 

location ^~ /api {
    proxy_http_version 1.1;
}

proxy_http_version : 프록시를 위한 HTTP 프로토콜 버전을 입력한다. 기본은 1.0이다. nginx 공식 홈페이지에 의하면 프로토콜 버전을 1.1로 입력하는 것을 추천한다.

 

location ^~ /api {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

proxy_set_header : 프록시 서버의 헤더값을 지정해준다.

 


 

location 설정 요소

 

location을 설정할 때, 잘못 설정하면 프록시 연결이 되지 않고 헤메기 쉽상이다.

이에 따라 location 설정에 대한 옵션을 따로 정리하고자 한다.

 

location = /api {
    ...
}

정확하게 일치하는 경우 해당 블록 설정을 실행 -> ( localhost/api 로 접속한 경우 )

 

location /api {
    ...
}

패턴이 일치하는 경우 -> ( localhost/api/host, localhost/api/good )

 

location ~ \.(gif|jpg|jpeg|png)$ {
    ...
}

정규식 표현이 일치하는 경우 해당 블록 설정을 실행(대, 소문자도 구분하여 실행한다.)

 

location ~* \.(gif|jpg|jpeg|png)$ {
    ...
}

정규식 표현이 일치하는 경우 해당 블록 설정을 실행(대, 소문자도 구분을 하지 않는다.)

 

 

https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/

 

NGINX Reverse Proxy | NGINX Plus

NGINX Reverse Proxy Configure NGINX as a reverse proxy for HTTP and other protocols, with support for modifying request headers and fine-tuned buffering of responses. This article describes the basic configuration of a proxy server. You will learn how to p

docs.nginx.com

 

728x90
반응형

'Web Server > Nginx' 카테고리의 다른 글

Nginx php-fpm 설정방법  (2) 2021.11.03
Nginx 설치 및 nginx.conf, default.conf 이해하기  (0) 2021.11.02
Comments