質問
SLBインスタンスはHTTPリスナーを使用し、ヘルスチェック用にHEAD
メソッドで設定されています。 業務サイトに正常にアクセスできる場合、ヘルスチェックに例外が表示されます。 ヘルスチェックをシミュレートするには、HEAD
メソッドを使用し、nc
コマンドを実行してビジネスサイトのステータスをテストします。 コマンドの例は次のとおりです。
echo -e "HEAD /test.html HTTP/1.0\r\n\r\n" | nc -t www.example.com 80
注: コマンドのtest.html d www.example.comは単なる例です。 実際の状況はサイトで使用されます。
HTTPステータスコードの404は次のように返されます。
比較するには、curl
コマンドを実行してビジネスサイトのステータスをテストします。
curl -I http://www.example.com/test.html
次の図は、HTTPステータスコードの値が200であることを示しています。これは正常であり、HEAD
メソッドおよびnc
コマンドの値とは異なります。
上記の主な問題は次のとおりです。
問題1
HEAD
メソッドのSLBヘルスチェックとシミュレーションテスト、およびnc
コマンドでサイト例外を表示するが、curl
コマンドでサイトが正常に実行されていることが表示される理由は、サービスサイトに正常にアクセスできますか?問題2サービスサイトから返されたHTTPステータスコードが404されます。 ヘルスチェックが異常なのはなぜですか?
原因
上記の問題の原因は次のとおりです。
問題1異なる結果の理由は次のとおりです。
curl
コマンドcurl
コマンドは、ブラウザーから返される結果と一致します。 要求されたドメインの下のリソースファイルがアクセスされます。つまり、test.htmlファイルはドメイン名をr www.example.comしません。SLBインスタンスのヘルスチェック。 SLBインスタンスにヘルスチェックドメイン名が設定されていない場合、ヘルスチェックのリクエストドメイン名はバックエンドサーバーのIPアドレス (192.0.2.1など) になります。 ファイルが返されます。 したがって、HTTP 404ステータスコードが返されます。
説明注: 以下では、例としてNginxのデフォルト設定を取り上げます。 Nginxのデフォルト設定には、デフォルトのWebサイトが含まれます。
HEAD
メソッドとnc
コマンドのシミュレーションテストHEAD
メソッド自体は問題ありませんが、nc
コマンドはドメイン名に対応するIPアドレスにリクエストを転送します。これはSLBインスタンスのヘルスチェックと同じです。 最後のリクエストはWebサーバーの既定のサイトに送信されるため、HTTP 404のステータスコードが返されます。
問題2デフォルトでは、SLBインスタンスのヘルスチェック設定は、通常のステータスコードとしてhttp_2xxとhttp_3xxを使用します。 他のすべてのステータスコードは、異常ステータスコードとして識別される。 HTTP 404はhttp_4xxに属しているため、サイト例外と判断されるヘルスチェックです。
回答
このトピックでは、さまざまな問題に対してさまざまなソリューションを提供します。
問題1この問題に関して、2つの解決策があります。実際の状況に応じて選択できます。
SLBインスタンスのヘルスチェック設定を改善します。 ヘルスチェック設定の完全なヘルスチェックパスおよびヘルスチェックドメインオプションのSLBインスタンスにログインできます。 たとえば、
www.example.com
のヘルスチェックドメイン、/test.html
のヘルスチェックパスを設定できます。 ヘルスチェックの設定方法とこれら2つのオプションの詳細については、「ヘルスチェックの設定」をご参照ください。Webサーバーの構成ファイルを変更して、デフォルトサイトを無効にすることができます。 Webサーバによって设定方法が异なります。 次の手順では、例としてNginxサーバーを使用します。
Nginxがインストールされているサーバーにリモートでログオンします。
Nginxのメイン設定ファイルを見つけます。 デフォルトのパスは
/etc/nginx/nginx.conf
です。 ソースコードを使用してNginxをインストールした場合、Nginxマスター設定ファイルのパスを確認できます。Nginxのメイン構成ファイルを編集し、default_serverとしてマークされたサーバー構成セグメントを見つけ、このコードセグメントに番号記号 (#) を付けてコメントアウトし、ファイルを終了して保存します。
次のコマンドを実行して、更新された設定ファイルが正常であることを確認します。
nginx -t
システムが例外を返した場合は、システムが次を返すまで、プロンプトに従って修正します。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
次のコマンドを実行して、Nginx設定ファイルをリロードします。
nginx -s reload
ヘルスチェックインスタンスのステータスを再度確認します。
問題2ビジネスニーズに基づいて、SLBインスタンスのステータスコード設定で通常ステータスのHTTPヘルスチェックを選択できます。 HTTP 404がサイト例外であると思わない場合は、通常のステータスコードとしてhttp_4xxを選択できます。 SLBインスタンスのヘルスチェック方法の詳細については、「ヘルスチェックの設定」をご参照ください。
適用範囲
SLB