502 Bad Gateway - ResponseWithBody

<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-LengthContent-EncodingTransfer-Encoding は、レスポンス ペイロードのサイズ、型、形式を示します。

このため、Apigee Edge は次のようなステータス コード 502 Bad Gateway を返します。 クライアントにエラーコード protocol.http.ResponseWithBody を 状況:

バックエンド サーバーのステータス コード
バックエンド サーバーからのレスポンスに以下を含む 204 No Content(コンテンツなし) 205 コンテンツをリセット
レスポンスの本文 エラー エラー

Content-Length ヘッダー

(ゼロ以外の値に設定)

エラー エラー

Content-Encoding

( <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 を使用してエラーを診断するには:

  1. <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインするユーザーとして、 付与します
  2. 問題を調査する組織に切り替えます。

  3. [Analyze] >API モニタリング >Investigate ページをご覧ください。
  4. エラーが発生した期間を選択します。
  5. 障害コードTime に対してプロットします。 <ph type="x-smartling-placeholder">
  6. 障害コード protocol.http.ResponseWithBody を持つセルを選択します。 下に示します。

    ( 拡大画像を表示

  7. 障害コードに関する情報が表示されます。 次のように protocol.http.ResponseWithBody します。

    ( 拡大画像を表示

  8. [ログを表示] をクリックし、失敗したリクエストの行を開きます。

    ( 拡大画像を表示

  9. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • ステータス コード: 502
    • 障害の発生元: target
    • 障害コード: protocol.http.ResponseWithBody
  10. [Fault Source] の値が target で、[Fault Source] の値が コードの値が protocol.http.ResponseWithBody である場合、 は、バックエンド サーバーが ステータス コード 204 No Content または 205 Reset Content レスポンス本文および/または 考えられる原因のセクションを参照してください。

Trace ツール

<ph type="x-smartling-placeholder">

Trace ツールを使用してエラーを診断するには:

  1. トレース セッションを有効にする および次のいずれかです。 <ph type="x-smartling-placeholder">
      </ph>
    1. 502 Bad Gateway エラーが発生するまで待ちます。または
    2. 問題を再現できる場合は、API 呼び出しを行って 502 Bad Gateway エラーを再現してください。
  2. [Show all FlowInfos] が有効になっていることを確認します。

  3. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
  5. 通常、エラーは 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
  6. トレースの AXAX(Analytics Data Recorded)フェーズに移動します。 クリックします。
  7. [Phase Details]、[Error Headers] セクションまで下にスクロールし、 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を確認します。 次のように指定します。

    ( 拡大画像を表示

  8. X-Apigee-fault-codeX-Apigee-fault-source の値がそれぞれ同じです。 それぞれ are protocol.http.ResponseWithBodytarget です。 これは、バックエンド サーバーが 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 アクセスログを使用してエラーを診断するには:

  1. Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。 HTTP 502 Bad Gateway に関する重要な情報を確認します。
  2. NGINX アクセスログを確認します。

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    ここで、 ORGENVPORT# は実際の値に置き換えられます。

  3. エラーコードを含む 502 エラーがないか検索します 特定の期間にprotocol.http.ResponseWithBody (過去に発生した場合)か、引き続き失敗するリクエストがあるかどうかを 502
  4. X-Apigee-fault-code502 エラーが見つかった場合 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
  5. X-Apigee-fault-codeX-Apigee-fault-source の値がそれぞれ同じです。 それぞれ protocol.http.ResponseWithBodytarget です。 これは、バックエンド サーバーが 204 No Content または 205 Reset Content ステータス コードを レスポンスの本文や、考えられる原因に記載されているヘッダーのいずれか、または両方に表示されます。

原因: バックエンド サーバーからのレスポンスの本文またはヘッダーに 204 レスポンスが含まれている

診断

  1. API を使用して、観測されたエラーの障害コード障害ソースを特定します。 Monitoring、Trace ツール、または NGINX アクセスログを 一般的な診断手順
  2. 障害コードprotocol.http.ResponseWithBody で、 [Fault Source] の値が target の場合、これはバックエンドが サーバーが 204 No Content ステータスまたは 205 Reset Content ステータスを返した レスポンスの本文および/または 考えられる原因
  3. バックエンド サーバーがレスポンス ペイロードの本文や 1 つを実際に送信したかどうかを検証する 考えられる原因に記載されたヘッダーに該当しない場合、 次の操作を行います。

    1. Public Cloud ユーザーで、プロジェクトに対して同じ API リクエストを行える場合は、 任意のシステムからバックエンド サーバーを

      <ph type="x-smartling-placeholder">
    2. Private Cloud ユーザーは、同じ API リクエストを 特定の 1 に関連付けられた Message Processor の 1 つからバックエンド サーバーからの直接接続を 組織と環境を定義します。
    3. バックエンド サーバーから受信したレスポンスを確認し、 レスポンス ペイロードの本文や上記のヘッダーの 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.

    4. 上のすべての例では、バックエンド サーバーは 204 No Content または レスポンスの本文またはヘッダーのいずれかを含む 205 Reset Content ステータス コード 考えられる原因に記載があります。
    5. そのため、Apigee Edge はエラーコード付きの 502 Bad Gateway ステータス コードを送信した protocol.http.ResponseWithBody

解決策

バックエンド サーバーが常に仕様を遵守していることを確認する <ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.3.6: 205 Reset Content204 No Content を送信する場合) または 205 Reset Content レスポンスが返されます。つまり、バックエンド サーバーは 次の内容を送信してはいけません204 No Content または 205 Reset Content レスポンス:

  1. レスポンス ペイロードの本文
  2. 次のいずれかのヘッダー: <ph type="x-smartling-placeholder">
      </ph>
    1. Content-Length
    2. Content-Encoding
    3. 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-LengthContent-EncodingTransfer-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

    ここでORGENVPORT# は、 使用します。

  • Message Processor システムログ /opt/apigee/var/log/edge-message-processor/logs/system.log