<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションが HTTP ステータス コード 502 Bad Gateway
とエラーを取得する
API 呼び出しのレスポンスとしてコード protocol.http.ResponseWithBody
を渡します。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 502 Bad Gateway
また、次のいずれかのエラー メッセージが表示される場合があります。
{ "fault":{ "faultstring":"Received 204 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
{ "fault":{ "faultstring":"Received 205 Response with message body", "detail":{ "errorcode":"protocol.http.ResponseWithBody" } } }
考えられる原因
このエラーは、バックエンド サーバーから Apigee Edge への HTTP レスポンスが次のいずれかの場合に発生します。
204 No Content
または 205 Reset Content
(ただし response を含む)
body および/または次のヘッダー(1 つまたは複数)を使用できます。
Content-Length
Content-Encoding
Transfer-Encoding
仕様に従う
<ph type="x-smartling-placeholder"></ph>
RFC 7231、セクション 6.3.5: 204 No Content、
<ph type="x-smartling-placeholder"></ph>
RFC 7231、セクション 6.3.6: 205 Reset Content と同様に、追加のコンテンツがないことが想定されます。
配信元サーバーからステータス コード 204 No
Content
または 205 Reset Content
のレスポンス ペイロード本文の一部として送信する必要があります。レスポンス ヘッダー
Content-Length
、Content-Encoding
、
Transfer-Encoding
は、レスポンス ペイロードのサイズ、型、形式を示します。
このため、Apigee Edge は次のようなステータス コード 502 Bad Gateway
を返します。
クライアントにエラーコード protocol.http.ResponseWithBody
を
状況:
バックエンド サーバーのステータス コード | ||
---|---|---|
バックエンド サーバーからのレスポンスに以下を含む | 204 No Content(コンテンツなし) | 205 コンテンツをリセット |
レスポンスの本文 | エラー | エラー |
(ゼロ以外の値に設定) |
エラー | エラー |
( <ph type="x-smartling-placeholder"></ph> Apigee Edge でサポートされているエンコード |
エラー | エラーなし |
Transfer-Encoding |
エラー | エラー |
<ph type="x-smartling-placeholder"> |
このエラーには、次の原因が考えられます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
バックエンド サーバーからの 204 レスポンスを含むレスポンスの本文またはヘッダー | バックエンド サーバーが 204 No Content または 205 Reset Content を送信する
レスポンスの本文や 1 つ以上のヘッダーを含む Content-Type
Content-Encoding または Transfer-Encoding 。 |
Edge Public Cloud ユーザーと Edge Private Cloud ユーザー |
共通の診断手順
このエラーを診断するには、次のいずれかのツールまたは手法を使用します。
API Monitoring
<ph type="x-smartling-placeholder">API Monitoring を使用してエラーを診断するには:
- <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインするユーザーとして、 付与します。
問題を調査する組織に切り替えます。
- [Analyze] >API モニタリング >Investigate ページをご覧ください。
- エラーが発生した期間を選択します。
- 障害コードを Time に対してプロットします。 <ph type="x-smartling-placeholder">
障害コード
protocol.http.ResponseWithBody
を持つセルを選択します。 下に示します。( 拡大画像を表示)
障害コードに関する情報が表示されます。 次のように
protocol.http.ResponseWithBody
します。( 拡大画像を表示)
[ログを表示] をクリックし、失敗したリクエストの行を開きます。
( 拡大画像を表示)
- [ログ] ウィンドウで、次の詳細をメモします。
<ph type="x-smartling-placeholder">
- </ph>
- ステータス コード:
502
- 障害の発生元:
target
- 障害コード:
protocol.http.ResponseWithBody
- ステータス コード:
- [Fault Source] の値が
target
で、[Fault Source] の値が コードの値がprotocol.http.ResponseWithBody
である場合、 は、バックエンド サーバーが ステータス コード204 No Content
または205 Reset Content
レスポンス本文および/または 考えられる原因のセクションを参照してください。
Trace ツール
<ph type="x-smartling-placeholder">Trace ツールを使用してエラーを診断するには:
- トレース セッションを有効にする
および次のいずれかです。
<ph type="x-smartling-placeholder">
- </ph>
502 Bad Gateway
エラーが発生するまで待ちます。または- 問題を再現できる場合は、API 呼び出しを行って
502 Bad Gateway
エラーを再現してください。
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストのいずれかを選択し、トレースを調べます。
- トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
通常、エラーは
flowinfo
[Error] に表示されます。 「Request sent to target server」フェーズの後、次のようになります。シナリオ #1
シナリオ #1: バックエンド サーバーがステータス コード
204 No Content
で応答する レスポンスの本文および/または 考えられる原因。トレースから次の値をメモします。
- エラー:
Received 204 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
シナリオ #2
シナリオ #2: バックエンド サーバーがステータス コードで応答する レスポンス本文および/またはレスポンスの本文のいずれかを含む
204 No Content
考えられる原因に記載されているヘッダー。トレースから次の値をメモします。
- エラー:
Received 205 Response with message body
- error.class:
com.apigee.rest.framework.BadGateway
- エラー:
- トレースの AXAX(Analytics Data Recorded)フェーズに移動します。 クリックします。
[Phase Details]、[Error Headers] セクションまで下にスクロールし、 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を確認します。 次のように指定します。
( 拡大画像を表示)
- X-Apigee-fault-code と X-Apigee-fault-source の値がそれぞれ同じです。
それぞれ
are protocol.http.ResponseWithBody
とtarget
です。 これは、バックエンド サーバーが204 No Content
または205 Reset Content
ステータス コードを レスポンスの本文や、考えられる原因に記載されているヘッダーのいずれか、または両方に表示されます。エラー 値 X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。
HTTP
502 Bad Gateway
に関する重要な情報を確認します。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、 ORG、ENV、PORT# は実際の値に置き換えられます。
- エラーコードを含む
502
エラーがないか検索します 特定の期間にprotocol.http.ResponseWithBody
(過去に発生した場合)か、引き続き失敗するリクエストがあるかどうかを502
。 X-Apigee-fault-code で
502
エラーが見つかった場合protocol.http.ResponseWithBody
の値と一致するものを求め、次に X-Apigee-fault-source の値。NGINX アクセスログの 502 エラーの例:
NGINX アクセスログの上記のサンプル エントリには、X- Apigee-fault-code と X-Apigee-fault-source:
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.ResponseWithBody
X-Apigee-fault-source target
- X-Apigee-fault-code と X-Apigee-fault-source の値がそれぞれ同じです。
それぞれ
protocol.http.ResponseWithBody
とtarget
です。 これは、バックエンド サーバーが204 No Content
または205 Reset Content
ステータス コードを レスポンスの本文や、考えられる原因に記載されているヘッダーのいずれか、または両方に表示されます。
原因: バックエンド サーバーからのレスポンスの本文またはヘッダーに 204 レスポンスが含まれている
診断
- API を使用して、観測されたエラーの障害コードと障害ソースを特定します。 Monitoring、Trace ツール、または NGINX アクセスログを 一般的な診断手順。
- 障害コードが
protocol.http.ResponseWithBody
で、 [Fault Source] の値がtarget
の場合、これはバックエンドが サーバーが204 No Content
ステータスまたは205 Reset Content
ステータスを返した レスポンスの本文および/または 考えられる原因。 バックエンド サーバーがレスポンス ペイロードの本文や 1 つを実際に送信したかどうかを検証する 考えられる原因に記載されたヘッダーに該当しない場合、 次の操作を行います。
Public Cloud ユーザーで、プロジェクトに対して同じ API リクエストを行える場合は、 任意のシステムからバックエンド サーバーを
<ph type="x-smartling-placeholder">- Private Cloud ユーザーは、同じ API リクエストを 特定の 1 に関連付けられた Message Processor の 1 つからバックエンド サーバーからの直接接続を 組織と環境を定義します。
バックエンド サーバーから受信したレスポンスを確認し、 レスポンス ペイロードの本文や上記のヘッダーの 1 つ以上を含めることができます。「はい」の場合 確認できます。
サンプル 1
サンプル 1: Content-Encoding ヘッダーを含むバックエンド サーバーのレスポンス 204
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Encoding: gzip
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveこのサンプルでは、バックエンド サーバーからのレスポンス
204 No Content
ステータス コードとContent-Encoding: gzip
サンプル 2
サンプル 2: Content-Length ヘッダー付きのバックエンド サーバーのレスポンス 204
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 204 No Content
< Content-Length: 48
< Date: Tue, 31 Jul 2021 21:41:13 GMT < Connection: keep-aliveこのサンプルでは、バックエンド サーバーからのレスポンス
204 No Content
ステータス コードとContent-Length: 48
サンプル 3
サンプル 3: バックエンド サーバーのレスポンス 205 とレスポンス本文
curl -v "https://BACKEND_SERVER_HOST_NAME/PATH" -H "HEADER: VALUE" -X HTTP_REQUEST_METHOD
… < HTTP/1.1 205 Reset Content < Date: Sat, 31 Jul 2021 17:14:09 GMT < Content-Length: 12 < Content-Type: text/plain; charset=utf-8 < * Connection #0 to host X.X.X.X left intact
This is a sample Response
このサンプルでは、バックエンド サーバーからのレスポンス レスポンス本文を含む
205 Reset Content
ステータス コードThis is a sample Response.
- 上のすべての例では、バックエンド サーバーは
204 No Content
または レスポンスの本文またはヘッダーのいずれかを含む205 Reset Content
ステータス コード 考えられる原因に記載があります。 - そのため、Apigee Edge はエラーコード付きの
502 Bad Gateway
ステータス コードを送信したprotocol.http.ResponseWithBody
。
解決策
バックエンド サーバーが常に仕様を遵守していることを確認する
<ph type="x-smartling-placeholder"></ph>
RFC 7231、セクション 6.3.6: 205 Reset Content(204 No Content
を送信する場合)
または 205 Reset Content
レスポンスが返されます。つまり、バックエンド サーバーは
次の内容を送信してはいけません204 No Content
または
205 Reset Content
レスポンス:
- レスポンス ペイロードの本文
- 次のいずれかのヘッダー:
<ph type="x-smartling-placeholder">
- </ph>
Content-Length
Content-Encoding
Transfer-Encoding
仕様
Apigee Edge が 502 Bad Gateway
ステータス コードとエラーコードを返す
protocol.http.ResponseWithBody
バックエンド サーバーがサーバーを
204 No Content
または 205 Reset Content
のレスポンス。ただし、
は次の RFC 仕様に準拠していません。
仕様 |
---|
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.3.5: 204 No Content |
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.3.6: 205 Reset Content |
主な注意点
推奨される解決策は、204 No Content
を送信するようにバックエンド サーバーを修正することです。
および 205 Reset Content
ステータス コード(レスポンス本文および
ヘッダー - Content-Length
、Content-Encoding
、
Transfer-Encoding
であり、仕様を遵守する
RFC 7231、セクション 6.3.5: 204 No Content、
RFC 7231、セクション 6.3.6: 205 Reset Content。
Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
次の診断情報を収集して、Apigee Edge サポートに連絡してください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
502
エラーの再現に使用する完全なcurl
コマンド- API リクエストのトレース ファイル
Private Cloud ユーザーの場合は、次の情報を提供します。
- 失敗したリクエストについて観測された完全なエラー メッセージ
- 環境名
- API プロキシ バンドル
- API リクエストのトレース ファイル
NGINX アクセスログ
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
ここで、ORG、ENV、PORT# は、 使用します。
- Message Processor システムログ
/opt/apigee/var/log/edge-message-processor/logs/system.log