502 Bad Gateway - DecompressionFailureAtResponse

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

症状

クライアント アプリケーションが HTTP ステータス コードと 502 Bad Gateway エラーコードを取得する API へのレスポンスとしての messaging.adaptors.http.flow.DecompressionFailureAtResponse できます。

エラー メッセージ

クライアント アプリケーションが次のレスポンス コードを受け取ります。

HTTP/1.1 502 Bad Gateway

また、次のようなエラー メッセージが表示される場合があります。

{
   "fault":{
      "faultstring":"Decompression failure at response",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"
      }
   }
}

考えられる原因

このエラーは、次の場合にのみ発生します。

  • HTTP レスポンス(バックエンド/ターゲット サーバーからの)ヘッダーで指定されたエンコード Content-Encoding は有効で、 <ph type="x-smartling-placeholder"></ph> Apigee Edge でサポートされている
  • ただし

  • バックエンド/ターゲット サーバーによって HTTP レスポンスの一部として送信されるペイロード形式 含まれない Content-Encoding ヘッダーで指定されたエンコード形式と一致している

これは Apigee Edge が、指定されたエンコードを使用してペイロードをデコードできないためです。これは、 ペイロードの形式が、 Content-Encoding ヘッダー。

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

サポートされている Content-Encoding値の例と Apigee Edge が、 では、次の場合にペイロード表現が期待されます。

シナリオ Content-Encoding ペイロードの表現
単一エンコード gzip

Unix gzip 形式。

詳しくは、 <ph type="x-smartling-placeholder"></ph> RFC1952 GZIP 形式

単一エンコード Deflate

この形式は、deflate 圧縮アルゴリズムを使用した zlib 構造を使用します。

<ph type="x-smartling-placeholder"></ph>をご覧ください。 RFC1950 および <ph type="x-smartling-placeholder"></ph> RFC1951.

複数のエンコード

複数のエンコード

たとえば、エンコードが 2 回行われる場合は、次のようになります。

  • gzip、deflate
  • gzip、gzip
  • deflate、gzip
  • deflate、deflate
ヘッダーに記述されている順序に従って、ペイロードに複数のエンコードが適用されます。

このエラーには、次の原因が考えられます。

原因 説明 トラブルシューティングの実施対象
<ph type="x-smartling-placeholder"></ph> レスポンスのペイロード形式が Content-Encoding と一致しない バックエンド/ターゲット サーバーによって送信されるレスポンス ペイロードの形式は、 エンコードされていないか、 Content-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. [プロキシ] フィルタが [すべて] に設定されていることを確認します。
  6. 障害コードTime に対してプロットします。
  7. 障害コード messaging.adaptors.http.flow.DecompressionFailureAtResponse を持つセルを選択します。 下に示します。

    ( 拡大画像を表示

  8. 障害コードに関する情報 messaging.adaptors.http.flow.DecompressionFailureAtResponse は次のように表示されます。

    ( 拡大画像を表示

  9. [ログを表示] をクリックし、502 エラーで失敗した行を開きます。

    ( 拡大画像を表示

  10. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • ステータス コード: 502
    • 障害の発生元: target
    • 障害コード: messaging.adaptors.http.flow.DecompressionFailureAtResponse
  11. [Fault Source] の値が target の場合、 レスポンスのペイロード形式が <ph type="x-smartling-placeholder"></ph> バックエンド サーバーのレスポンス ヘッダーに指定された、サポートされているエンコード方式 Content-Encoding

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. 失敗したレスポンスの 1 つを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
  5. 通常、エラーは [Response Received from target server] フェーズを以下に示します。

    ( 拡大画像を表示

  6. トレースのプロパティの値をメモします。

    • Content-Encoding: gzip
    • レスポンス コンテンツの本文: {"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
  7. [Response Received from target server] の直後のエラーフェーズに移動する フェーズ:

    ( 拡大画像を表示

    次のプロパティに注意してください。

    • エラー: Decompression failure at response
    • error.class: com.apigee.errors.http.server.BadGateway
    • error.cause: Not in GZIP format

      error.cause は、レスポンスのペイロードが GZIP 形式ではないことを示しています。 つまり、Apigee Edge はレスポンスのペイロードが Content-Encoding ヘッダーで指定されていた(以前の したがって、Apigee Edge は gzip を使用してペイロードを解凍できず、 エラー Decompression failure at response

    この例では、ターゲット/バックエンド サーバーからのレスポンスは 200 です。 ただし、クライアント アプリケーションは 502 Apigee Edge によってエラーが返されるためです。

  8. トレースの [Response Sent to Client] フェーズに移動してクリックします。

    ( 拡大画像を表示

    トレースの次の詳細に注意してください。

    • ステータス コード: 502 Bad Gateway
    • エラーの内容: {"fault":{"faultstring":"Decompression failure at response","detail":{"errorcode":"messaging.adaptors.http.flow.DecompressionFailureAtResponse"}}}
  9. トレースの AXAX(Analytics Data Recorded)フェーズに移動します。 クリックします。

  10. [Phase Details]、[Error Headers] セクションまで下にスクロールし、 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を確認します。 次のように指定します。

    ( 拡大画像を表示

  11. X-Apigee-fault-codeX-Apigee-fault-source の値が表示されます。 messaging.adaptors.http.flow.DecompressionFailureAtResponse として、および target は、レスポンスのペイロード形式が Content-Encoding ヘッダーで指定されたエンコード。
    レスポンス ヘッダー
    X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
    X-Apigee-fault-source target

NGINX

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

NGINX アクセスログを使用してエラーを診断するには:

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

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

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

  3. 特定の期間に 502 エラーがないか検索して確認できます (過去に発生した問題の場合)、または引き続き失敗するレスポンス 502
  4. X-Apigee-fault-code502 エラーが見つかった場合 値 messaging.adaptors.http.flow.DecompressionFailureAtResponse と一致し、 次に、X-Apigee-fault-source. の値を確認します。

    NGINX アクセスログの 502 エラーの例:

    NGINX アクセスログの上記のサンプル エントリには、次の値が含まれます。 X-Apigee-fault-code X-Apigee-fault-code

    レスポンス ヘッダー
    X-Apigee-fault-code messaging.adaptors.http.flow.DecompressionFailureAtResponse
    X-Apigee-fault-source target

原因: レスポンスのペイロード形式が Content-Encoding と一致しない

デフォルトでは、Apigee Edge は、レスポンス ヘッダーに Content-Encoding には、有効なフィールドと <ph type="x-smartling-placeholder"></ph> エンコード方式をご覧ください。そのため、レスポンス ペイロードの形式は レスポンス ヘッダー Content-Encoding で指定されたエンコードと一致する必要があります。 不一致がある場合は、このエラーが発生します。

診断

  1. API を使用して、観測されたエラーの障害コード障害ソースを特定します。 Monitoring、Trace ツール、または NGINX アクセスログを 一般的な診断手順
  2. 障害コードmessaging.adaptors.http.flow.DecompressionFailureAtResponse および [Fault Source] の値が target の場合、 バックエンド/ターゲット サーバーによって送信されたレスポンス ペイロードの形式が、 <ph type="x-smartling-placeholder"></ph> レスポンス ヘッダー Content-Encoding に指定されたサポートされているエンコード
  3. 次のいずれかの方法で、HTTP レスポンスの一部として不一致を判断できます。 メソッド:

    エラー メッセージ

    エラー メッセージを使用して検証するには:

    1. Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、 faultstring をご覧ください。

      エラー メッセージの例:

      "faultstring":"Decompression failure at response"
      
    2. 上記のエラー メッセージでは、 "Decompression failure at response": レスポンスを意味します。 指定されたエンコードで圧縮解除できませんでした。 Content-Encoding ヘッダー。

    トレース

    Trace を使用して検証するには:

    1. Content-Typeerror.cause を特定します。 (Trace を使用) 一般的な診断手順で説明されているとおりに処理されます。
    2. サンプル トレースの値は次のとおりです。

      • Content-Encoding: gzip
      • error.cause: Not in GZIP format

      レスポンス ヘッダー Content-Encoding の値は gzip です。 ただし、レスポンスのペイロードが GZIP 形式でないerror.cause で示されます)。したがって、Apigee Edge は 502 Bad Gateway とエラーコード messaging.adaptors.http.flow.DecompressionFailureAtResponse

    実際のリクエスト

    実際のリクエストを使用して検証するには:

    ターゲット/バックエンド サーバーに対する実際のリクエストにアクセスできる場合 次の手順を実施します

    1. Public Cloud/Private Cloud ユーザーの場合は、リクエストを行います。 バックエンド サーバー自体や任意の外部 IP アドレスから、 バックエンド サーバーへのリクエストを実行できる場所からマシンを自動起動できます。
    2. Private Cloud ユーザーは、Cloud VPN の API からのリクエストを いずれかの Message Processor からバックエンド サーバーへ送信されます。
    3. バックエンド サーバーから送信されたレスポンスを調べて、値を特定する レスポンス ヘッダー Content-Encoding. で渡されます。
    4. リクエストの一部として送信されるペイロードの形式を特定します。
    5. Content-Encoding ヘッダーの値が次のリストにある場合: <ph type="x-smartling-placeholder"></ph> サポートされているエンコードですが、レスポンス ペイロードの形式は Content-Encoding ヘッダーで指定されたエンコードと一致しない場合 それが問題の原因です

      例:

      curl -v https://HOSTALIAS/test
      

      ***trimmed***
      >
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Encoding: gzip
      < Date: Mon, 02 Aug 2021 08:17:35 GMT
      < Transfer-Encoding: chunked
      <
      < response_payload.zip Response Body(not in GZIP format)>
      

      上記のサンプル レスポンスでは、値 gzipContent-Encoding ヘッダーは、 <ph type="x-smartling-placeholder"></ph> サポートされているエンコードをご確認ください。ただし、 response_payload.zip は ZIP ファイルとして送信されます。したがって、この レスポンスが失敗し、502 Bad Gateway エラーと次のエラーコードが返されます。 messaging.adaptors.http.flow.DecompressionFailureAtResponse

    Message Processor のログ

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

    Message Processor ログを使用して検証するには:

    Private Cloud ユーザーは、Message Processor のログを使用できます。 HTTP 502 エラーに関する重要な情報を確認します。

    1. Message Processor のログを確認します。

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. 特定の期間に 502 エラーがないか検索する 時間(過去に問題がある場合)、またはレスポンスがある場合 まだ 502 で失敗しています。次の検索文字列を使用できます。

      grep -ri "ZipException"
      
    3. system.log に次のような行が含まれています。

      シナリオ #1

      シナリオ #1: API レスポンスにヘッダー Content-Encoding: gzip がある場合

      2021-08-02 06:50:25,433  NIOThread@2 ERROR HTTP.CLIENT -
      HTTPClient$Context.onInputException() :  ClientInputChannel(ClientChannel[Connected:
      Remote:3.8.1.1:9000 Local:10.0.115.32:41298]@38140 useCount=1 bytesRead=0
      bytesWritten=203 age=469ms  lastIO=0ms  isOpen=true).onExceptionRead exception: {}
      java.util.zip.ZipException: Not in GZIP format
      ---trimmed--
      2021-08-02 06:50:25,433  NIOThread@2 INFO  HTTP.CLIENT -
      HTTPClient$Context.logContextDetails() : Request details : host=null
      path=/folder/testFile method=GET. Channel details : Bytes read=0
      2021-08-02 06:50:25,434  NIOThread@2 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@4806fdab, Not in GZIP format)
      2021-08-02 06:50:25,434  NIOThread@2 INFO  HTTP.SERVICE -
      ExceptionHandler.handleException() : Exception
      java.util.zip.ZipException: Not in GZIP format
      occurred while writing to channel null
      2021-08-02 06:50:25,434  NIOThread@2 INFO  HTTP.SERVICE -
      ExceptionHandler.handleException() : Exception trace:
      java.util.zip.ZipException: Not in GZIP format
      

      上記のエラー メッセージの java.util.zip.ZipException: Not in GZIP format 行は、レスポンスが ペイロードは GZIP 形式で送信されませんが、Content-Encoding gzip として指定されます。Apigee Edge は例外をスローし、 502 ステータス コードと障害コードを返す messaging.adaptors.http.flow.DecompressionFailureAtResponse クライアントアプリケーションに提供します

      シナリオ #2

      シナリオ #2: API レスポンスにヘッダー Content-Encoding: deflate がある場合

      2021-08-02 06:35:21,215  NIOThread@0 ERROR HTTP.CLIENT -
      HTTPClient$Context.onInputException() :  ClientInputChannel(ClientChannel[Connected:
      Remote:3.8.1.1:9000 Local:192.168.194.140:35224]@36014 useCount=1 bytesRead=0
      bytesWritten=202 age=439ms  lastIO=2ms  isOpen=true).onExceptionRead exception: {}
      java.util.zip.ZipException: incorrect header check
      ---trimmed----
      Caused by:
      java.util.zip.DataFormatException: incorrect header check
      ---trimmed---
      2021-08-02 06:35:21,215  NIOThread@0 INFO  HTTP.CLIENT -
      HTTPClient$Context.logContextDetails() : Request details :
      host=null path=/folder/testFile method=GET. Channel details : Bytes read=0
      2021-08-02 06:35:21,216  NIOThread@0 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError(HTTPResponse@3966e277,
      incorrect header check)
      2021-08-02 06:35:21,216  NIOThread@0 INFO  HTTP.SERVICE -
      ExceptionHandler.handleException() : Exception
      java.util.zip.ZipException: incorrect header check occurred while writing to channel null
      2021-08-02 06:35:21,217  NIOThread@0 INFO  HTTP.SERVICE -
      ExceptionHandler.handleException() : Exception trace:
      java.util.zip.ZipException: incorrect header check
      
      

      java.util.zip.ZipException: incorrect header check および Caused by: java.util.zip.DataFormatException: incorrect header check 上記のエラー メッセージを見ると、レスポンスのペイロードが deflate 形式であり、 deflate の Content-Encoding ヘッダー。Apigee Edge は 例外がスローされ、次を含む 502 ステータス コードが返されます。 障害コード messaging.adaptors.http.flow.DecompressionFailureAtResponse クライアントアプリケーションに提供します

解決策

  1. Apigee Edge の API プロキシフローで圧縮レスポンス ペイロードが必要ない場合 バックエンド サーバーでは、ヘッダー Content-Encoding を渡さないでください。 レスポンス ペイロードを圧縮する必要がある場合は、ステップ 2 に進みます。
  2. レスポンスのペイロードを圧縮する必要がある場合は、バックエンド サーバーが 常に以下が送信されます。 <ph type="x-smartling-placeholder">
      </ph>
    • 次のいずれか <ph type="x-smartling-placeholder"></ph> サポートされているエンコードContent-Encoding ヘッダーの値として 回答
    • Apigee Edge へのサポートされている形式のレスポンス ペイロードがエンコードと一致している Content-Encoding ヘッダーで指定された形式
  3. 上記の例では、レスポンスのペイロードは ZIP 形式ですが、レスポンス ヘッダーは Content-Encoding: gzip を指定します。レスポンスを送信すると、この問題を解決できます。 ヘッダーを Content-Encoding: gzip として指定し、レスポンス ペイロードを gzip に含めます。 形式:
    curl -v https://HOSTALIAS/v1/test
    
    >
    < HTTP/1.1 200 OK
    < Accept-Ranges: bytes
    < Content-Encoding: gzip
    < Date: Mon, 02 Aug 2021 08:17:35 GMT
    < Transfer-Encoding: chunked
    <
    < response_payload.gz Response Body(in GZIP format)>
    
    <ph type="x-smartling-placeholder">

仕様

Apigee Edge は、ステータス コード 502 Bad Gateway とエラーコードを返します。 次の RFC に基づく messaging.adaptors.http.flow.DecompressionFailureAtResponse 仕様:

仕様
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 6.5.1
<ph type="x-smartling-placeholder"></ph> RFC 7231、セクション 3.1.2.2

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