<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-LengthContent-EncodingTransfer-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.ResponseWithBodyX-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.ResponseWithBodyX-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-LengthContent-EncodingTransfer-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