Classic Load Balancer を介してウェブサイトにリクエストを行うと、HTTP 502 エラーが発生します。どのようにトラブルシューティングすればよいですか?

HTTP 502 (Bad Gateway) エラー は、以下のようないくつかの理由で発生することがあります。

  • EC2 インスタンスで動作しているウェブサーバーまたは関連するバックエンドサーバーが、Classic Load Balancer には解析できないメッセージを返した場合。
  • ウェブサーバーまたは関連するバックエンドサーバーが、それ自体で 502 エラーを返した場合。

    502エラーの原因を調べるには、

  • Classic Load Balancer での ELB アクセスログを有効にして、それぞれのリクエストに対するバックエンドと Elastic Load Balancing (ELB) の応答を確認します。アクセスログのエントリには、次の 2 つのフィールドがあります。elb_status_codebackend_status_code です。これらのコードを使用して、502 エラーの原因を特定します。
  • ロードバランサーの CloudWatch メトリクスを表示して、バックエンドが生成した 502 エラーを確認します。これは HTTPCode_Backend_5XX メトリクスの下にあります。ELB が生成した 502 エラーは、HTTPCode_ELB_5XX メトリクスの下にあります。

バックエンドの応答が ELB 502 エラーを生じさせていた場合には、次のような原因が考えられます。

  • それぞれのヘッダーの間に、複数の CRLF を含む応答。
  • 非整数を含む Content-Length ヘッダーを含む応答。
  • Content-Length ヘッダー値よりもバイト数の多いボディ部を含む応答。

502 エラーがバックエンドサーバーにより生成されたものである場合には、アプリケーションのオーナーに問い合わせてください。502 エラーが Classic Load Balancer により生成されたものである場合には、バックエンドからの HTTP 応答の形式が誤っています。ELB が生成した 502 エラーのトラブルシューティングは、以下のステップで行ってください。

    バックエンドアプリケーションから返されたレスポンス本文が、次の(RFC に代わる )で述べられているHTTP仕様に準拠しているかどうかを確認します。
RFC 7230 - HTTP/1.1:メッセージの構文とルーティング
RFC 7231 - HTTP/1.1 : セマンティクスとコンテンツ
RFC 7232 - HTTP/1.1: 条件付きリクエスト 
RFC 7233 - HTTP/1.1: 範囲指定リクエスト
RFC 7234 - HTTP/1.1:キャッシング
RFC 7235 - HTTP/1.1:認証

2. 応答のヘッダー部が、「Content-Type:text」などのように、キーと値の組という正しい構文に従っているか確認します。HTTP の応答ヘッダー部に、Content-Length または転送エンコーディングが欠けていないか確認します。Web サーバーの HTTP ヘッダーフィールドの詳細については、「HTTP ヘッダーフィールド一覧」を参照してください。次のものと似たコマンドを実行して、返された HTTP 応答を調べます。

curl -vko /dev/null server_instance_IP

3. ELB アクセスログで、HTTP 502 エラーが重複していないかチェックします。elb_status_code と backend_status_code の両方の 502 エラーが存在する場合には、1 つ以上のウェブサーバーインスタンスで問題が生じていることを示しています。問題を示しているウェブサーバーインスタンスを特定し、バックエンドウェブサーバーインスタンスのウェブサーバーログをチェックします。次に示すのは、一般的なウェブサーバーとオペレーティングシステムでログが出力される場所です。

Apache ログ

  • CentOS、RHEL、Fedora、およびAmazon Linuxのウェブサーバーログは、/var/log/httpd/ディレクトリにあります。
  • DebianおよびUbuntu Linuxのウェブサーバログは、/var/log/apache2 and /var/log/lighthttpd/ディレクトリにあります。

Nginxログ

  • Nginx のアクセスログの場所は、nginx.conf file 内で、access_log という語の後に access.log へのパスを記すという形式で定義されています。
  • デフォルトの場所は/var/log/nginx/access.logです。

IISログ

Windows IIS 7、IIS 7.5、およびIIS 8.0のウェブサーバーログは、inetpub\logs\Logfilesディレクトリに保存されています。Internet Information Server(IIS )ログの詳細については、「he HTTP status code in IIS 7.0, IIS 7.5, and IIS 8.0」を参照してください。502 エラーが ELB で生成されていることと、バックエンドの応答が RFC の規格に準拠していることが確認された場合には、AWS サポートにお問い合わせください。


このページは役に立ちましたか? はい | いいえ

AWS サポートナレッジセンターに戻る

サポートが必要ですか?AWS サポートセンターをご覧ください。

公開日: 2016 年 9 月 9 日

更新: 2018 年 4 月 10 日