

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Classic Load Balancer のトラブルシューティング: HTTP エラー
<a name="ts-elb-error-message"></a>

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

リクエストと HTTP レスポンスは、ヘッダーフィールドを使用して HTTP メッセージに関する情報を送信します。ヘッダーフィールドはコロンで区切られた名前と値のペアであり、キャリッジリターン (CR) とラインフィード (LF) で区切ります。HTTP ヘッダーフィールドの標準セットが RFC 2616 の「[Message Headers](http://tools.ietf.org/html/rfc2616#section-4.2)」で定義されています。詳細については、「[HTTP ヘッダーと Classic Load Balancer](x-forwarded-headers.md)」を参照してください。

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

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

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

**Topics**
+ [HTTP 400: BAD\_REQUEST](#ts-elb-errorcodes-http400)
+ [HTTP 405: METHOD\_NOT\_ALLOWED](#ts-elb-errorcodes-http405)
+ [HTTP 408: Request timeout](#ts-elb-errorcodes-http408)
+ [HTTP 502: Bad gateway](#ts-elb-errorcodes-http502)
+ [HTTP 503: Service Unavailable](#ts-elb-errorcodes-http503)
+ [HTTP 504: Gateway Timeout](#ts-elb-errorcodes-http504)

## HTTP 400: BAD\_REQUEST
<a name="ts-elb-errorcodes-http400"></a>

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

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

**原因 2**: クライアントが HTTP CONNECT メソッドを使用しました。このメソッドは Elastic Load Balancing ではサポートされていません。

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

## HTTP 405: METHOD\_NOT\_ALLOWED
<a name="ts-elb-errorcodes-http405"></a>

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

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

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

## HTTP 408: Request timeout
<a name="ts-elb-errorcodes-http408"></a>

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

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

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

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

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

## HTTP 502: Bad gateway
<a name="ts-elb-errorcodes-http502"></a>

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

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

** 解決方法**: インスタンスから送信された応答が HTTP 仕様に準拠していることを確認します。[AWS サポート センター](https://console.aws.amazon.com/support/home#/)にアクセスしてサポートをお求めください。

## HTTP 503: Service Unavailable
<a name="ts-elb-errorcodes-http503"></a>

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

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

**解決方法**: これは一時的な問題であり、数分以上は継続しません。問題が解決しない場合は、[AWS サポート センター](https://console.aws.amazon.com/support/home#/)にアクセスしてサポートをお求めください。

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

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

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

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

**原因 4**: サージキューがいっぱいです。

**解決方法 4**: インスタンスに、リクエスト率に対応するための十分な容量があることを確認します。これを確認するには、`SpilloverCount` メトリクスを確認します。

## HTTP 504: Gateway Timeout
<a name="ts-elb-errorcodes-http504"></a>

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

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

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

**原因 2**: 登録されたインスタンスが Elastic Load Balancing への接続を終了中です。

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