Nginx Reverse Proxy 란?

1. Forward Proxy,  Reverse Proxy 란?

1-1. Forward Proxy 란?

일반적으로 대학 및 기업과 같은 대규모 조직에서 내부적으로 사용하며 아래와 같은 것들을 수행한다.

  • 네트워크의 사전 설정된 정책에 따라 아웃바운드 트래픽을 규제 (예를들어, 회사 내부직원이 회사 컴퓨터로 특정 사이트에 접속할 때 접속을 막는다.)
  • 직원이 특정 웹사이트를 방문하지 못하도록 차단
  • 직원 온라인 활동 모니터링
  • 클라이언트의 IP 주소를 위장하고 들어오는 악성 트래픽이 원본 서버에 도달하지 못하도록 차단
  • 외부 사이트 콘텐츠를 캐싱하여 사용자 경험 개선

 

1-2. Reverse Proxy 란?

다수의 서버를 Reverse Proxy 서버 하단부에 위치시켜 두고,
특정 조건(일치하는 도메인 혹은 주소)에 맞는 요청을 적절한 서버에게 전달해주는 역할을 수행하는 것이 Reverse Proxy이다.
클라이언트는 Reverse Proxy 서버에게 요청하기 때문에 실제 서버의 정보를 알 수가 없다.

2. 적용방법

2-1. Reverse Proxy 적용방법

http {
    upstream minimilab{
        server 127.0.0.1:8000 weight=3;
        server 127.0.0.1:8001;
        server 127.0.0.1:8002;
        server 127.0.0.1:8003;
    }

    server {
        listen 80;
        server_name www.minimilab.com;
        location / {
            proxy_pass http://minimilab;
        }
    }
}

2-2. Load balancing methods (부하 부산 규칙)

  • round-robin(디폴트) - 돌아가면서 분배한다.
  • ip_hash - 같은 방문자로부터 도착한 요청은 항상 같은 업스트림 서버가 처리 할 수 있게 한다.
  • random - 랜덤으로 분배한다.
  • least_conn - 연결수가 가장 적은 서버를 선택해서 분배한다.
  • least_time - 연결수가 가장 적으면서 평균 응답시간이 가장 적은 쪽을 선택해서 분배한다.
upstream backend {
    least_conn ;
    server 127.0.0.1:8080;
    server 127.0.0.2:8081;
}

2-3. option

  • weight=n : 업스트림 서버의 비중을 나타낸다. 이 값을 2로 설정하면 그렇지 않은 서버에 비해 두배 더 자주 선택된다.
  • max_fails=n : 서버와의 통신 시도 실패 횟수를 설정한다. n으로 지정한 횟수만큼 fail_timeout 의 시간만큼의 실패가 일어나면 서버가 죽은 것으로 간주한다.
  • fail_timeout=n : max_fails가 지정된 상태에서 이 값이 설정만큼 서버가 응답하지 않으면 죽은 것으로 간주한다.
  • backup : 메인 서버가 모두 동작하지 않을 때에만 backup으로 지정된 서버를 사용한다.
upstream backend {
    server backend1.example.com:12345  weight=5;
    server backend2.example.com:12345 backup;
}

server {
    listen 12346;
    proxy_pass backend;
}

참고

http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html
https://opentutorials.org/module/384/4328
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
https://www.imperva.com/learn/performance/reverse-proxy/

댓글

Designed by JB FACTORY