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;
    }
  }
}

「IF」はNginxで回避するのが最善であり、「if」なしでこれを再コーディングする方法を誰かが知っているかどうかを尋ねたいと思いましたか?

ありがとうございました

回答:


62

物事を複雑にしすぎないでください。ELBヘルスチェックをそれら専用の特別なURLに向けるだけです。

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

返信ありがとうございます...少し触れてください...現在ELBヘルスチェックで/index.htmlを指しています。ヘルスチェックで「/ elb-status」と言って、上記のサーバーブロックを追加することを意味しますか?それですか?/ elb-status URLは存在する必要がありますか?thx再び
アダム

/ elb-statusをELBに追加し、上記のサーバーブロックを追加すると、完全に機能しました-ありがとうございます!!! 非常に感謝
アダム

お役に立てて嬉しいです!
ceejayoz

1
うーん、私は取得してい"/usr/share/nginx/html/elb-status" failed (2: No such file or directory)ます...これがなぜである可能性がありますか?
マイケルウォーターフォール14年

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.