メニュー
Elastic Load Balancing
クラシックロードバランサー

Classic Load Balancer のトラブルシューティングを行う: HTTP エラー

HTTP メソッド (HTTP 動詞ともいう) は、HTTP リクエストを受信するリソースに対して実行するアクションを指定します。HTTP リクエストの標準メソッドは、RFC 2616 の「Method Definitions」で定義されています。標準メソッドには GET、POST、PUT、HEAD、および OPTIONS があります。ウェブアプリケーションによっては、HTTP/1.1 メソッドの拡張であるメソッドが必要とされます (導入されている場合もあります)。一般的な HTTP 拡張メソッドには PATCH、REPORT、MKCOL、PROPFIND、MOVE、LOCK などがあります。Elastic Load Balancing では、すべての標準および非標準 HTTP メソッドを使用できます。

リクエストと HTTP レスポンスは、ヘッダーフィールドを使用して HTTP メッセージに関する情報を送信します。ヘッダーフィールドはコロンで区切られた名前と値のペアであり、キャリッジリターン (CR) とラインフィード (LF) で区切ります。HTTP ヘッダーフィールドの標準セットが RFC 2616 の「Message Headers」で定義されています。詳細については、「HTTP ヘッダーおよび Classic Load Balancer」を参照してください。

ロードバランサーは、HTTP リクエストを受信すると、誤った形式のリクエストがないかどうかをチェックすると共に、メソッドの長さをチェックします。ロードバランサーへの HTTP リクエスト内のメソッドの長さの合計は、127 文字以下にする必要があります。これら 2 つのチェックを渡す HTTP リクエストは、ロードバランサーにより EC2 インスタンスに送信されます。リクエストのメソッドフィールドの形式が正しくなければ、HTTP 400: BAD_REQUEST エラーが返されます。リクエストのメソッドフィールドの長さが 127 文字を超えていれば、HTTP 405: METHOD_NOT_ALLOWED エラーが返されます。

EC2 インスタンスは、リクエストに含まれるメソッドを実装し、応答をクライアントに返信することによって、有効なリクエストを処理します。サポートされているメソッドもサポートされていないメソッドも処理するように、インスタンスを設定しておく必要があります。

以下はロードバランサーによって返されるエラーメッセージ、考えられる原因、問題の解決のためのステップです。

HTTP 400: BAD_REQUEST

説明: クライアントが無効なリクエストを送信したことを示します。

Cause: クライアントが HTTP 仕様を満たさない誤った形式のリクエストを送信しました。たとえば、リクエストの URL にスペースを含めることはできません。

解決方法: 直接インスタンスに接続し、クライアントリクエストの詳細をキャプチャします。ヘッダーと URL で誤った形式のリクエストを確認します。リクエストが HTTP 仕様を満たすことを確認します。

HTTP 405: METHOD_NOT_ALLOWED

説明: メソッドの長さが無効であることを示しています。

原因: リクエストヘッダー内のメソッドの長さが 127 文字を超えています。

解決方法: メソッドの長さを確認します。

HTTP 408: Request Timeout

説明: クライアントがリクエストをキャンセルしたか、リクエスト全体の送信に失敗したことを示します。

原因 1: ネットワークの中断またはリクエストの構造の問題 (ヘッダーの形式が完全ではない、指定されたコンテンツのサイズが実際に送信されたコンテンツのサイズと一致しないなど)。

解決方法 1: リクエストを生成しているコードを調べ、そのコードを実際のリクエストをより詳細に調べることのできる登録済みインスタンス (または開発/テスト環境) に直接送信します。

原因 2: クライアントとの接続が閉じています (ロードバランサーは応答を送信できません)。

解決方法 2: リクエストを送信するマシンでパケットスニッファーを使用して、応答が送信される前にクライアントが接続を閉じないことを確認してください。

HTTP 502: Bad Gateway

説明: 登録されたインスタンスから送信された応答をロードバランサーが解析できなかったことを示します。

原因: インスタンスからの応答の形式が適切でないか、ロードバランサーに問題があります。

解決方法: インスタンスから送信された応答が HTTP 仕様に準拠していることを確認します。AWS Support Centerを参照してください。

HTTP 503: Service Unavailable

説明: ロードバランサーまたは登録されたインスタンスが原因でエラーが発生していることを示します。

原因 1: ロードバランサーにリクエストを処理する能力が不足しています。

解決方法: これは一時的な問題であり、数分以上は継続しません。問題が解決しない場合、AWS Support Centerを参照してください。

原因 2: 登録されたインスタンスがありません。

解決方法 2: ロードバランサーによる応答が設定された利用可能ゾーンごとに 1 つ以上のインスタンスを登録します。これを確認するには、CloudWatch の HealthyHostCount メトリクスを確認します。各アベイラビリティーゾーンにインスタンスが登録されているかどうかが不明な場合は、クロスゾーン負荷分散を有効にすることをお勧めします。詳細については、「Classic Load Balancer のクロスゾーン負荷分散を設定する」を参照してください。

原因 3: 正常なインスタンスがありません。

解決方法 3: ロードバランサーの応答を設定しているすべての利用可能ゾーンに正常なインスタンスがあることを確認します。これを確認するには、CloudWatch の HealthyHostCount を確認します。

HTTP 504: Gateway Timeout

説明: リクエストがアイドルタイムアウト期間内に完了しなかったためロードバランサーが接続を閉じたことを示します。

原因 1: アプリケーションの応答が、設定されているアイドルタイムアウトよりも長くかかっています。

解決方法 1: HTTPCode_ELB_5XX および Latency メトリクスをモニタリングします。これらのメトリクスに増加があった場合は、アイドルタイムアウト期間内に応答しないアプリケーションが原因である可能性があります。タイムアウトしようとしているリクエストの詳細を確認するには、ロードバランサーのアクセスログを有効にし、Elastic Load Balancing によって生成されたログの応答コード 504 を確認します。必要に応じて、キャパシティーを増やしたり、設定されているアイドルタイムアウトを長くしたりして、時間のかかるオペレーション (大容量ファイルのアップロードなど) が完了できるようにします。詳細については、「Classic Load Balancer のアイドル接続のタイムアウトを設定する」および「Elastic Load Balancing での長いレイテンシーのトラブルシューティングを行う方法を教えてください」を参照してください。

原因 2: 登録されたインスタンスが Elastic Load Balancing への接続を終了させています。

解決方法 2: EC2 インスタンスのキープアライブ設定を有効にし、キープアライブタイムアウトが、ロードバランサーのアイドルタイムアウト設定より大きい値に設定されていることを確認します。