AWS Amazon ELB 상태 확인을위한 Nginx 솔루션-IF없이 200 반환


22

AWS ELB 상태 확인을 만족시키기 위해 Nginx에서 작동하는 다음 코드가 있습니다.

map $http_user_agent $ignore {
  default 0;
  "ELB-HealthChecker/1.0" 1;
}

server {
  location / {
    if ($ignore) {
      access_log off;
      return 200;
    }
  }
}

나는 Nginx로 'IF'를 피하는 것이 가장 좋다는 것을 알고 있으며 누군가 'if'없이 이것을 코딩하는 방법을 알고 싶었습니까?

고맙습니다

답변:


62

지나치게 복잡하지 마십시오. ELB 건강 ​​검진을 특별 URL로 지정하십시오.

server {
  location /elb-status {
    access_log off;
    return 200;
  }
}

답장을 보내 주셔서 감사합니다 ... 터치에 대해 더 자세히 설명해 주시겠습니까 ... 현재 ELB 상태 확인에서 /index.html을 가리키고 있습니다. 상태 점검이 '/ elb-status'라고 말하고 위의 서버 블록을 추가 하시겠습니까? 그게 다야? / elb-status url이 있어야합니까? thx 다시
아담

ELB에 / elb-status를 넣고 위의 서버 블록을 추가했을 때 완벽하게 작동했습니다. 크게 apprecated
아담

기꺼이 도와 드리겠습니다!
ceejayoz 2016 년

1
흠, 나는 "/usr/share/nginx/html/elb-status" failed (2: No such file or directory)... 왜 이것이 될 수 있는지 전혀 모른다?
Michael Waterfall

1
깔끔한 솔루션. 😙
phegde

27

위의 답변을 개선하기 만하면됩니다. 다음은 훌륭하게 작동합니다.

location /elb-status {
    access_log off;
    return 200 'A-OK!';
    # because default content-type is application/octet-stream,
    # browser will offer to "save the file"...
    # the next line allows you to see it in the browser so you can test 
    add_header Content-Type text/plain;
}

5

업데이트 : 사용자 에이전트 유효성 검사가 필요한 경우

set $block 1;

# Allow only the *.example.com hosts. 
if ($host ~* '^[a-z0-9]*\.example\.com$') {
   set $block 0;
}

# Allow all the ELB health check agents.
if ($http_user_agent ~* '^ELB-HealthChecker\/.*$') { 
  set $block 0;
}

if ($block = 1) { # block invalid requests
  return 444;
}

# Health check url
location /health {
  return 200 'OK';
  add_header Content-Type text/plain;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.