의식여행

[Nginx] Reverse Proxy 설정 본문

IT(리눅스&보안&개발)/리눅스-CentOS

[Nginx] Reverse Proxy 설정

의식여행중 2018. 7. 5. 18:08

리버스 프록시(Reverse Proxy)란?

컴퓨터 네트워크에서 클라이언트를 대신해서 한 대 이상의 서버로부터 자원을 추출하는 프록시 서버의 일종입니다.
그런 다음 이러한 자원들을 마치 웹 서버 자체에서 기원한 것 처럼 해당 클라이언트로 반환 합니다.

즉,  서버들을 위해 임의의 클라이언트가 해당 서버에 접속하는 중간 매게체입니다.
(클라이언트들을 위해 임의의 서버에 접속하는 중간 매개체는, 포워드 프록시(Forward proxy)

이미 웹 서비스를 제공하는 시스템에 널리 보급되어 사용되고 있으며
사용하는 경우 가장 큰 장점은 "웹서비스 품질 향상" 과 ""보안성 향상" 그리고 네트워크 트래픽비용 감소" 

리버스 프록시(Reverse Proxy) 설정

1) Upstream

-Upstrem은 클라이언트의 요청을 처리 할 WES/WAS 서버를 선정합니다.
-Upstream Module은 Nginx에 내장되어 있으며 Load Balancing(부하분산, 속도개선 등) 역할을 수행합니다.
-사용을 위해서는 Upstream 블록을 이용합니다.
ex) upstream [이름] {
server [IP];
keepalive [Value]; }

-사용 가능 옵션
ip_hash; // 같은 IP는 같은 WEB/WAS 서버에 접속
weight=n // WEB/WAS 서버의 비중을 나타낸다.(3일 경우, 타서버에 비해 3배 더 자주 선택)
max_fails=n // n으로 지정한 횟수만큼 실패가 일어나면 서버가 죽은 것으로 간주
fail_timeout=n // max_files 지정된 상태에서 이 값만큼 서버가 응답하지 않으면 죽은 것으로 간주
backup // 모든 서버가 동작하지 않을 때 backup으로 표시된 서버가 동작

-keepalive
클라이언트가 TCP로 요청을 할 경우, ReverseProxy도 WEB/WAS 서버와 동일하게 TCP 통신을 하게 됩니다.
이러한 상황이라면 Hanshake 과정이 일어나게 되고, keepalive 설정이 off 되어있다면 한 번의 요청만 처리한 후 소켓이 끊어지게 됩니다.

1) 소켓 유지를 하지 않아 다수으 Time-Waite 소켓 생성
2) 불필요한 TCP Handshake가 일어남으로써 응답 속도 지연

즉 이럴한 부분을 해결하기 위해서는 반드시 적절한 keepalive 옵션과 값을 설정해주어야만 합니다.
ex. keepalive 10 // 최초 생성된 소켓에 대해서 10번의 Request를 받겠다.

2) proxy_cache_path

ex. proxy_cache_path /var/lib/nginx/cache levels=1:2 incative=60d keys_zone=cache:64m max_size=10g;
// 캐시파일 저장위치와 저장방식을 설정
-levels1:2 옵션은 첫 번째 단계의 Dir은 한 글자, 두 번 째 Dir은 두 글자로 명명(a/bc)
-inactive=60d // 60일 동안 접근이 없는 캐시팔일 삭제
-cache에 메타파일을 정하기 위해서 10m 공간을 할당
-max-size = 공간의 최대 용량을 10g 설정
-/var/lib/nginx/cache 경로 소유자 와 소유그룹 nobody 설정 필요

3) proxy 옵션

/location {

-proxy_pass http://test.com // http://test.com에 대한 요청을 프록시 한다.
-proxy_set_header Host $host; // 프록시 통신간에 "Host" Header로 재정의
-proxy_set_header Connection ""; // 프록시 통신간에 "Host" 헤더 외 모두 제외
-proxy_http_version 1.1; // 프록시 통신간에 HTTP/1.1 사용
-proxy_cache cache; // proxy_cache_path의 key_zone(cache) 캐시를 사용하도록 설정
-proxy_cache_valid 200 365d; // Response Code 200에 대해서는 365일 동안 캐시에 저장
-proxy_cache_use_stale error timeout invalid_header updating http_500 http_5002 http_503 http_504 // 5xx는 캐시하지 않음

}

감사합니다.

Comments