すべてのプロダクト
Search
ドキュメントセンター

:SLBを使用する場合、サイトアクセスは正常ですが、サイト例外はヘルスチェックです

最終更新日:Sep 19, 2024

質問

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サーバーを使用します。

      1. Nginxがインストールされているサーバーにリモートでログオンします。

      2. Nginxのメイン設定ファイルを見つけます。 デフォルトのパスは /etc/nginx/nginx.confです。 ソースコードを使用してNginxをインストールした場合、Nginxマスター設定ファイルのパスを確認できます。

      3. Nginxのメイン構成ファイルを編集し、default_serverとしてマークされたサーバー構成セグメントを見つけ、このコードセグメントに番号記号 (#) を付けてコメントアウトし、ファイルを終了して保存します。

      4. 次のコマンドを実行して、更新された設定ファイルが正常であることを確認します。

        nginx -t

        システムが例外を返した場合は、システムが次を返すまで、プロンプトに従って修正します。

        nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
        nginx: configuration file /etc/nginx/nginx.conf test is successful
        

      5. 次のコマンドを実行して、Nginx設定ファイルをリロードします。

        nginx -s reload

      6. ヘルスチェックインスタンスのステータスを再度確認します。

  • 問題2ビジネスニーズに基づいて、SLBインスタンスのステータスコード設定で通常ステータスのHTTPヘルスチェックを選択できます。 HTTP 404がサイト例外であると思わない場合は、通常のステータスコードとしてhttp_4xxを選択できます。 SLBインスタンスのヘルスチェック方法の詳細については、「ヘルスチェックの設定」をご参照ください。

適用範囲

  • SLB