Amazon ELB ヘルスチェックはどのように機能しますか?

Amazon ELB ヘルスチェックはどのように機能しますか?

サーバーの ELB を構成する際に問題が発生しています。

まったく同じ設定で 2 つのマイクロインスタンスを起動し、ロード バランシングを試みます。ただし、ヘルス チェックに合格しません (HTTP ポート 80 パス: "/")。

  • ウェブサイトでは Ping は正常です。80 の telnet も同様です。

ヘルスチェックはどのように機能しましたか? 何か本当に間違ったことをしているのでしょうか?

編集:

  • ブラウザからの直接アクセスと GET (curl 経由) の両方が正常に動作します (ステータス 200)

答え1

私も同じ問題を抱えています。暫定的な解決策として TCP:80 をチェックしています (これで問題なく動作します)。

答え2

応答は、HTTP 200 応答であることとは別に、特定のヘッダーを含む必要があるという結論に達しました。インスタンスで実行されている Tomcat サーバーから返された HTTP 200 は機能しませんでしたが、httpd によって提供される静的 HTML ページ (これも 200 コードを返します) は正常に機能しました。ヘッダーを見ると、いくつかの違いの 1 つは、Tomcat のヘッダーにコンテンツ タイプが含まれていないことでした。ただし、それがなぜ違いを生むのかはわかりません。

答え3

各サーバーの指定されたパス「/」に対して HTTP GET 要求を実行し、成功した HTTP 応答コード (200) を検索するものと想定します。http://<backend_server_IP>:80/ブラウザ (または や などの CLI ツールwget)経由で に GET 要求を正常に行うことができますかcurl

リクエストが正常に処理された場合、次に確認すべきことは、ポート 80 へのアクセスが特定のソース アドレスまたはサブネットに制限されるようにサーバーのセキュリティ グループを構成したかどうかです。その場合は、ELB のセキュリティ グループをフィルターに追加する必要があります。グループは常に次のように呼び出されます。

amazon-elb/amazon-elb-sg

したがって、AWS コンソールのセキュリティグループセクションの「ソース」フィールドにこれを追加するだけです。

答え4

そこで、静的 HTML ファイル (PHP ページではなく) を指定して、http チェックを機能させることにしました。

'/' は、curl などを使用すると有効な http ステータスを返すにもかかわらず機能しません。ただし、'/file.html' はヘルス チェックに合格します。

関連情報