Classic Load Balancer を介してリクエストを行う場合の HTTP 502 エラーのトラブルシューティング方法を教えてください。
最終更新日: 2022 年 8 月 29 日
クライアントが Classic Load Balancer (CLB) 経由でウェブサイトにリクエストを送信すると、HTTP 502 エラーが表示されます。どうすれば解決できますか。
簡単な説明
HTTP 502 (不正なゲートウェイ) エラーは、次のいずれかの理由で発生する可能性があります。
- EC2 インスタンスで実行されているウェブサーバーまたは関連するバックエンドアプリケーションサーバーから、Classic Load Balancer で解析できないメッセージが返されている。
- ウェブサーバーまたは関連するバックエンドアプリケーションサーバーが、独自の 502 エラーメッセージを返している。
これらの 502 エラーの原因を調べるには、次の手順を実行します。
- Classic Load Balancer で Elastic Load Balancing (ELB) アクセスログをオンにして、各リクエストのバックエンドと ELB レスポンスコードを確認します。アクセスログエントリには、 elb_status_code と backend_status_code の 2 つのフィールドが含まれます。これらのコードを使用して、502 エラーの原因を特定します。
- ロードバランサーの Amazon CloudWatch メトリクスを表示して、HTTPCode_Backend_5XX メトリクスの下に表示されるバックエンドで生成された 502 エラーを確認します。ELB で生成された 502 エラーは HTTPCode_ELB_5XX メトリクスの下に表示されます。
バックエンドレスポンスが ELB 502 エラーの原因である場合、問題の原因は次のとおりです。
- レスポンスが、各ヘッダー間に複数の CRLF を含んでいる。
- レスポンスに、非整数を含む Content-Length ヘッダーが含まれている。
- レスポンスで、Content-Length ヘッダー値よりも多くのバイトが本文に含まれている。
バックエンドサーバーによって 502 エラーが生成された場合は、アプリケーションの所有者に問い合わせてください。Classic Load Balancer によって 502 エラーが生成された場合、バックエンドからの HTTP レスポンスの形式が正しくありません。ELB が生成する 502 エラーのトラブルシューティングを行うには、次の手順に従います。
解決方法
1. バックエンドアプリケーションから返されたレスポンス本文が、HTTP 仕様に準拠しているかどうかを確認します。RFC Editor の次のドキュメントを参照してください。
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 または転送エンコーディングが欠落していないことを確認します。ウェブサーバーの HTTP ヘッダーフィールドの詳細については、HTTP ヘッダーフィールドのリストで Internet Assigned Numbers Authority のドキュメントを参照してください。次のようなコマンドを実行して、返された 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 および /var/log/lighthttpd/ ディレクトリにあります。
NGINX ログ
- NGINX アクセスログの場所は nginx.conf ファイル (access_log /path/to/access.log) で定義されています。
- デフォルトの場所は /var/log/nginx/access.log です。
IIS ログ
Windows IIS 7、IIS 7.5、および IIS 8.0 のウェブサーバーログは、inetpub\logs\Logfiles ディレクトリに保存されます。インターネットインフォメーションサーバー (IIS) のログの詳細については、マイクロソフトのドキュメント「IIS 7.0 以降のバージョンの HTTP 状態コード」を参照してください。502 エラーが ELB で生成されたものであり、バックエンドのレスポンスが RFC 規約に適合していることを確認した場合は、AWS サポートにお問い合わせください。