본문 바로가기

Web etc

nginx proxy pass와 AWS ELB 사용시 주의점

이번에 시스템의 앞쪽에 proxy server를 setup 하면서 nginx를 사용했었다.

upstream도 AWS에 올라가 있었기 때문에 당연히 proxy_pass의 end point는 ELB.


설정은 아래와 같았다.


upstream ui_upstream {

server domain:443;

}
 
proxy_pass https://ui_upstream;


위와 같은 설정으로 사용 중 이상한 현상이 감지 되기 시작했는데 일정한 시간이 지나고 나면 

이 proxy server에서 upstream으로 연결을 하지 못 하는 현상이 발생하기 시작했다. nginx를 재기동하면 다시 정상이 되고..


Error message는 아래와 같이 나오기 시작했다.


2017/10/10 12:10:00 [error] 11#0: *13506615 connect() failed (113: Host is unreachable) while connecting to upstream, client: X.X.X.X, server: , request: "GET /url HTTP/1.1", upstream: "https://X.X.X.X:443/url", host: "-", referrer: "-"



nginx upstream 모듈의 스펙을 보면 (http://nginx.org/en/docs/http/ngx_http_upstream_module.html)

아래와 같은 내용이 있다.


monitors changes of the IP addresses that correspond to a domain name of the server, and automatically modifies the upstream configuration without the need of restarting nginx (1.5.12). The server group must reside in the shared memory.

In order for this parameter to work, the resolver directive must be specified in the http block. Example:


http {

    resolver 10.0.0.1;


    upstream u {

        zone ...;

        ...

        server example.com resolve;

    }

}


ELB의 IP가 다이나믹하게 변경되는 경우가 있는데 이때 새로운 IP로 resolve를 하지 못 하여 문제가 발생했던 것.

결국 resolve를 사용하던가, upstream 모듈을 사용하지 않는 경우에는 proxy_pass $var; 와 같이 변수로 지정하여 사용도록 변경 해줘야 했다.