애리밍
3k
2017-07-21 12:33:02 작성 2017-07-21 16:31:04 수정됨
2
3099

Nginx proxy_pass AWS ELB 타겟시 설정팁.


간혹 Nginx 와 ELB 사이의 Connection이 간헐적으로 끊기는 현상이 있습니다.


해당 이슈의 에러 코드를 보면

connect() failed (113: No route to host) while connecting to upstream,

위와 같은 에러가 발생하죠.


이런 현상은 ELB가 때때로 IP를 변경하면서 발생하는 문제로 간단하게 해당 이슈 발생시 Nginx Restart하는 것 만으로 이슈가 해결됩니다만, 문제는 이 현상이 간헐적이라는거죠.


그래서 이 이슈를 해결하기 위한 방법을 공유합니다.


AWS 의 VPC는 항상 0.2로 끝나는 DNS 서버를 가지고 있습니다. VPC 생성시 정하는 CIDR이 172.32.0.0/16인 경우 DNS 는 172.32.0.2가 됩니다.


이 설정을 Nginx에 추가합니다.

resolver 172.32.0.2 valid=10s;


여기서 주의할점은 proxy_pass를 변수로 정의해야 한다는 점 입니다. 변수로 정의 하지 않으면 단 한번만 해결하며 그 이후에 같은 증상이 발생합니다.


최종 설정은 아래와 같습니다.

server {
      keepalive_timeout 10;
      listen       80;
      location / {
                resolver 172.32.0.2 valid=10s;
                set $backend "http://[ELB URL]";
                proxy_pass $backend;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Host $http_host;
                proxy_set_header X-NginX-Proxy true;
                add_header 'Cache-Control' 'no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0';
                real_ip_header X-Forwarded-For;
                real_ip_recursive on;
                proxy_redirect off;
                expires off;
                access_log off;
                charset utf-8;
        }

뭔가..잡다한 설정은 많지만 resolver와 set, proxy_pass부분만 보시면 되겠네요.


해당 설정을 하면 DNS를 통하여 커넥션을 하기에 발생되는 이슈 해결이 가능합니다.


여기가 출처 : https://serverfault.com/questions/560632/some-nginx-reverse-proxy-configs-stops-working-once-a-day

4
3
  • 댓글 2

  • 타키투스
    879
    2017-07-21 22:24:45

    오~~~ 고급 팁이네요.... 스크랩해놨도 되나요?

    0
  • 애리밍
    3k
    2017-07-22 13:07:32

    네네 꿀팁은 공유해야죠

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.