- Published on
nginx config 설정 (2)
1. upstream
-
Upstream 서버는 다른 말로 Origin 서버라고도 한다. 즉 여러대의 컴퓨터가 순차적으로 어떤 일을 처리 할 때 어떤 서비스를 받는 서버를 의미한다. NGINX는 Downstream 서버라고 할 수 있다.
-
아래 예시와 같이 upstream 서버를 설정할 수 있다.
location / {
proxy_pass http://my_backend;
}
upstream my_backend {
server 10.161.68.12:9091 max_fails=1; fail_timeout=60s;
server 10.161.68.13:9091 max_fails=1; fail_timeout=60s;
server 10.161.68.14:9091 max_fails=1; fail_timeout=60s;
}
설정옵션들
-
weight=n : 업스트림 서버의 비중을 나타낸다. 이 값을 2로 설정하면 그렇지 않은 서버에 비해 두배 더 자주 선택된다.
-
max_fails=n : n으로 지정한 횟수만큼 실패가 일어나면 서버가 죽은 것으로 간주한다.
-
fail_timeout=n : max_fails가 지정된 상태에서 이 값이 설정만큼 서버가 응답하지 않으면 죽은 것으로 간주한다.
-
ip_hash : 같은 방문자로부터 도착한 요청은 항상 같은 업스트림 서버가 처리 할 수 있게 한다.
-
down : 해당 서버를 사용하지 않게 지정한다. ip_hash; 지시어가 설정된 상태에서만 유효하다.
-
backup : 모든 서버가 동작하지 않을 때 backup으로 표시된 서버가 사용되고 그 전까지는 사용되지 않는다.
nginx가 제공하는 upstream서버의 로드밸런싱 메서드
- 라운드로빈(Round-robin)은 기본으로 사용하는 메서드로 모든 서버에 동등하게 요청을 분산한다.
upstream test_proxy {
server web-01;
server web-02;
}
- least_conn은 연결이 가장 작은 서버로 요청을 보낸다.
upstream test_proxy {
least_conn;
server web-01;
server web-02;
}
- ip_hash는 클라이언트 IP주소를 기준으로 요청을 분배한다. IP주소가 같다면, 동일한 서버로 요청을 전송한다.
upstream test_proxy {
ip_hash;
server web-01;
server web-02;
}
2. error page 처리
- 기본적으로 error_page를 통하여 에러 페이지를 설정할 수 있다.
location /test { //특정 디렉토리에 대한 404 에러 페이지 처리
error_page 404 = /error_404.html;
}
...
error_page 500 502 503 504 = /error.html //여러개의 코드에 대한 에러 페이지 동시 처리
- nginx를 proxy서버로 사용할때 목적지서버의 404나 403 등의 에러응답코드를 다른것으로 변조하고 싶은경우가 있다. 이럴경우 아래의 proxy_intercept_errors on; 코드를 삽입해서 proxy서버에서 직접 콘트롤 가능하게 할 수 있다.
proxy_intercept_errors on;
...
rewrite ^ /v1/AUTH_test/$cc/thumbnail/$cc.jpg break;
proxy_pass http://my_backend;
error_page 401 /updateToken;
error_page 404 =200 /resources/images/img_make_err.png
3. Auth Request 모듈
-
auth request 모듈은 하위요청(subrequest)의 결과에 따라 클라이언트 인증을 구현하는 모듈이다. (1.5.4 버전부터 지원) 설치시 다음과 같이 활성화한다. --with-http-auth-request-module
-
auth-request 로 authentication 하위요청을 보내고, auth-request-set 으로 authorization server 에서 응답으로 보낸 값을 저장할 수 있다.
location / {
auth_request /auth; //authentication 하위요청
error_page 401 = @error401; //인증실패 401에러 처리
//$user 변수에 authorization server에서 X-Forwarded-User HTTP header 로 보낸 값을 set한다.
auth_request_set $user $upstream_http_x_forwarded_user;
proxy_set_header X-Forwarded-User $user;
proxy_pass http://protected-resource:8080;
}
location /auth {
internal;
proxy_set_header Host $host;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
proxy_pass http://fakenetscaler:8888;
}