AWSで Elastic Load Balancing(ELB) をセットアップして、複数のインスタンス間でリクエストを分割しようとしています。同じAMIに基づいてWebサーバーのイメージをいくつか作成しました。それぞれに個別にsshを実行し、個別のパブリックDNSを介してサイトにアクセスできます。
各インスタンスをロードバランサーに追加しましたが、それらはすべてStatus: Out of Service
ヘルスチェックに失敗したため。パブリックDNSから各インスタンスにアクセスできるため、ほとんど混乱していますが、ロードバランサーのDNS名にアクセスするたびにタイムアウトが発生します。
私はすべてのドキュメントを読んでグーグルで検索しようとしましたが、行き詰っています。正しい方向へのポインタまたはリンクは大歓迎です。
この同じ問題についてAWSサポートに問い合わせました。どうやら彼らのシステムは、ELBの背後にあるすべてのインスタンスが長時間停止しているケースを処理する方法を知りません。 AWSサポートは、ステータスをすぐに更新する必要がある場合、手動でステータスを更新できます。
提案された修正により、ec2インスタンスを単に停止するのではなくELBから登録解除し、再起動時に再登録します。
ヘルスチェックは(デフォルトで)ロードバランサーに組み込まれた各インスタンスのindex.htmlにアクセスすることにより行われます。インスタンスのドキュメントルートにindex.htmlがない場合、デフォルトのヘルスチェックは失敗します。エラスティックロードバランサーを作成するときに、ヘルスチェック用のカスタムプロトコル、ポート、およびパスを設定できます。
最後に、私はこれを機能させました。問題はAmazon Security Groupsにありました。これは、ポート80へのアクセスを開発エリアの少数のマシンに制限し、ロードバランサーがインスタンスのApacheサーバーにアクセスできなかったためです。ロードバランサーがインスタンスにアクセスすると、In Serviceになります。
インスタンスでtail -f /var/log/Apache2/access.log
を使用してチェックし、ロードバランサーがサーバーにアクセスしようとしているかどうかを確認し、サーバーがロードバランサーに与えている回答を確認しました。
お役に立てれば。
Webサーバーが正常に動作している場合、ヘルスチェックは200を返さないURLで実行されます。
私のために働くトリック:インスタンスに行き、curl localhost:80/pathofyourhealthcheckurlと入力してください
ヘルスチェックのURLを変更して、常に200の応答が返されるようにした後。
私の場合、インスタンスとロードバランサーに割り当てられたセキュリティグループのルールは、トラフィックが2つの間を通過することを許可していませんでした。これにより、ヘルスチェックが失敗しました。
同じ問題に直面するために、Pingプロトコルをhttpsからsslに変更しました。 動いた !
ヘルスチェックに移動->ヘルスチェックの編集をクリック-> PingプロトコルをHTTPSからSSLに変更
PingターゲットSSL:443 タイムアウト5秒 間隔30秒 異常なしきい値5 正常なしきい値10
これを理解しようとして何時間も費やしたので、これを追加します...
ヘルスチェックエンドポイントを設定したが、それでもOut of Service
、サーバーがリクエストをリダイレクトしている(つまり、301
または302
応答)。
たとえば、エンドポイントが/app/health/
ただし、入力するのは/app/health
(末尾のスラッシュなし)をELBのヘルスチェックエンドポイントフィールドに入力すると、200応答が返されないため、ヘルスチェックは失敗します。
私は同じエラーを受け取りました。私の場合、特定のhtmlファイルをs3バケットから「/ var/www/html」の場所にコピーする必要がありました。ロードバランサーのパスで参照される同じhtml。
HTMLファイルをコピーした後、問題は解決しました。
同様の問題がありました。この問題は、HTTPヘルスチェックを使用し、サイトをパスワードで保護するために.htaccessを使用したために発生したようです。
これがリストされていないため、このスレッドを見る他の人には:
ヘルスチェックが、応答サーバーがリッスンしているポートをチェックしていることを確認してください。
例えば。ポート3000で実行されているnode.js->ヘルスチェックをポート3000にポイントします。
ポート80または443ではありません。これらは、ALBが使用するものです。
私はこれに朝を費やしました。はい。
ウェブアプリのホスティングに関するAWSチュートリアルに取り組んでいたときに、この問題に遭遇しました。 ステップ7b は次のように述べています:
「Ping Pathを/に設定します。これにより、index.htmlまたは他の名前が付けられているかどうかにかかわらず、クエリがデフォルトページに送信されます。」
この「/」のように引用符にスラッシュを入れることもできます。この「/」ではなく、ヘルスチェックで確認してください。 。
この問題を解決する一般的な方法を提供したいと思います。 ApacheやnginxなどのWebサーバーをセットアップしたら、アクセスログファイルを読み取って何が起こったかを確認してください。私の機会に、それは401 error
nginxに基本認証を追加したため。もちろん、@ ivankoniが思い出すように、チェックするドキュメントが存在しないためかもしれません。