502 Bad Gateway - TooBigHeaders

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

症状

クライアント アプリケーションは、次の HTTP ステータス コード 502 Bad Gateway を取得します。 エラーコード protocol.http.TooBigHeaders を API のレスポンスとして できます。

エラー メッセージ

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

HTTP/1.1 502 Bad Gateway

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

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

考えられる原因

このエラーは、ターゲット/バックエンドから送信されたヘッダーの合計サイズが場合に発生します。 HTTP レスポンスの一部として Apigee Edge に送信されていることが、許可された IP アドレス Apigee Edge で許可されている上限をご覧ください。

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

原因 説明 トラブルシューティングの実施対象
レスポンスのヘッダーのサイズが上限を超えています 特定のヘッダーのヘッダーサイズ、またはすべてのヘッダー ターゲット/バックエンド サーバーによって Apigee Edge への HTTP レスポンスの一部として送信されるヘッダー Apigee Edge で許可されている上限を超えている。 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. [Proxy] フィルタを選択して、障害コードを絞り込むことができます。
  6. 障害コードTime に対してプロットします。
  7. 障害コード protocol.http.TooBigHeaders を持つセルを選択します。 下に示します。

    ( 拡大画像を表示

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

    ( 拡大画像を表示

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

    ( 拡大画像を表示

  10. [ログ] ウィンドウで、次の詳細をメモします。 <ph type="x-smartling-placeholder">
      </ph>
    • ステータス コード: 502
    • 障害の発生元: target
    • 障害コード: protocol.http.TooBigHeaders
  11. [Fault Source] の値が target で、[Fault Source] の値が Code の値は protocol.http.TooBigHeaders であり、 ターゲット/ バックエンド サーバーからの HTTP レスポンスに、サイズより大きいヘッダーが含まれている Apigee Edge で許容される上限を超えています。

Trace ツール

<ph type="x-smartling-placeholder">
  1. トレース セッションを有効にする および次のいずれかです。 <ph type="x-smartling-placeholder">
      </ph>
    1. 502 Bad Gateway エラーが発生するのを待つ。または
    2. 問題を再現できる場合は、API 呼び出しを行って 502 Bad Gateway エラーを再現してください。
  2. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  3. トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
  4. このエラーは通常、Error という名前のフローで 以下のように、[Request sent to target server] フェーズを示します。

    ( 拡大画像を表示

    トレースのエラーの値をメモします。

    • エラー: response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    これは、Apigee Edge(Message Processor コンポーネント)がエラーを ヘッダーサイズの制限により、バックエンド サーバーからのレスポンスを受信するとすぐに 超えています。

  5. [Response Sent to Client] にエラーが表示されます。 Apigee Edge によって送信されたエラー レスポンスを以下に示します。

    ( 拡大画像を表示

  6. トレースのエラーの値をメモします。上記のサンプル トレースから、次のことがわかります。 <ph type="x-smartling-placeholder">
      </ph>
    • エラー: 502 Bad Gateway
    • エラーの内容: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. トレースの AXAX(Analytics Data Recorded)フェーズに移動します。 クリックすると、関連する詳細が表示されます。

    ( 拡大画像を表示

    次の値に注意してください。

    エラーヘッダー
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    エラー コンテンツ: 本文 {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

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.TooBigHeaders が表示される (過去に発生した場合)か、引き続き失敗するリクエストがあるかどうかを 502
  4. X-Apigee-fault-code で 502 エラーが見つかった場合 protocol.http.TooBigHeaders の値と一致するもの)を求め、 X-Apigee-fault-source. の値。

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

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

    エラーヘッダー
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

原因: レスポンスのヘッダーのサイズが上限を超えています

診断

  1. [Fault Code]、[Fault Source]、[Response Payload Size] の値を決定します。 API Monitoring、Trace ツール、または NGINX Access のログを使用して確認されたエラー 一般的な診断手順
  2. [Fault Source] の値が target の場合、これは次のことを示しています。 ターゲット/バックエンド サーバーから Apigee に送信されるレスポンスに、サイズより大きいヘッダーが含まれている Apigee Edge で許可されている上限を超えています。
  3. ターゲット/バックエンドからのレスポンスに、サイズが 上限を超えている必要があります。

    エラー メッセージ

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

    Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、 faultstring をご覧ください。faultstring は、 レスポンス ヘッダーのサイズが上限を超えています。

    エラー メッセージの例:

    "faultstring":"response headers size exceeding 25,600"
    

    上記のエラー メッセージの faultstring で、 合計サイズが上限を超えるヘッダーがレスポンスに含まれています。

    実際のリクエスト

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

    ターゲット/バックエンド サーバーに対する実際のリクエストにアクセスできる場合は、 次の操作を行います。

    1. Public Cloud/Private Cloud ユーザーの場合は、リクエストを行います。 バックエンド サーバー自体や任意の外部 IP アドレスから、 バックエンドへのリクエストを実行できるマシンから あります。
    2. Private Cloud ユーザーは、Cloud Storage バケットの いずれかの Message Processor からバックエンド サーバーにリクエストを送信できます。
    3. バックエンド サーバーから受信したレスポンスを調べ、 レスポンスで渡されるヘッダーの合計サイズを計算して検証します。
    4. レスポンス ペイロードのヘッダーのサイズが Apigee Edge で許可されている上限を超えている場合 それが問題の原因です

      ターゲット サーバーからのレスポンスの例:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      上記の例では、Testheader1Testheader2 のサイズが大きいため、 の上限を超えているため、このエラーが表示されます。 Apigee Edge

    で確認できます。 <ph type="x-smartling-placeholder">

    Message Processor のログ

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

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

    Private Cloud ユーザーは、Message Processor のログを使用して レスポンス ヘッダーのサイズが Apigee Edge で許可されている上限をご覧ください。

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

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

    2. 特定の期間に 502 エラーがないか検索する 問題が発生したか、問題が発生したか まだ 502 で失敗しています。次の検索文字列を使用できます。
      grep -ri "response headers size exceeding"
      
    3. system.log から次のような行が表示されます。 レスポンス ヘッダーのサイズは、ケースによって異なる場合があります。
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
      
    4. Message Processor がバックエンド/ターゲットからレスポンスを受け取った直後 ヘッダーの合計サイズが 25 KB を超えていることが判明した場合 停止してエラーがスローされます。

      response headers size exceeding 25,600

      [Total Header Size] が 25 KB を超えていて、Apigee サイズが上限の 25 KB を超えると(障害コードを含む)エラーがスローされる デバイス名: protocol.http.TooBigHeaders

解決策

サイズを修正

オプション 1 [推奨]: ヘッダーサイズを送信しないようにターゲット サーバー アプリケーションを修正する Apigee の上限を超過した場合

<ph type="x-smartling-placeholder">
  1. 特定のターゲット サーバーがレスポンス ヘッダーのサイズを増やす理由を分析する 制限で定義されている上限を超えています。
  2. これが望ましくない場合は、次の内容を送信するようにバックエンド サーバー アプリケーションを修正します。 サイズが Apigee Edge
  3. ヘッダー情報をレスポンス本文の一部として送信できるかどうかを確認します。
  4. 可能であれば、 使用します。これにより、回答が超過するのを防ぐことができます。 使用します。
で確認できます。 <ph type="x-smartling-placeholder">

CwC

方法 2 : CwC プロパティを使用してレスポンス ヘッダーサイズの上限を引き上げる

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

Apigee では、 CwC プロパティ。これにより、レスポンス ヘッダーのサイズ上限を増やすことができます。 詳しくは、 <ph type="x-smartling-placeholder"></ph> Message Processor の上限の構成

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

上限

Apigee では、クライアント アプリケーションとバックエンド サーバーが ドキュメントに記載されている上限を超えるヘッダーサイズが (リクエスト/レスポンス ヘッダーのサイズ) Apigee Edge の制限

  1. Public Cloud ユーザーの場合、 リクエスト ヘッダーとレスポンス ヘッダーのサイズは、リクエスト/レスポンス ヘッダーのサイズに記載されています。 Apigee Edge の制限
  2. Private Cloud ユーザー の場合は、デフォルトの上限を変更した可能性があります。 リクエスト ヘッダーとレスポンス ヘッダーのサイズ制限。 レスポンス ヘッダーの最大サイズの上限は、 現在の上限を確認する方法

現在の上限を確認する方法

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

このセクションでは、プロパティ HTTPResponse.headers.limit に以下が設定されていることを確認する方法について説明します。 Message Processor 上の新しい値で更新されました。

  1. Message Processor マシンで、次のプロパティを検索します。 HTTPResponse.headers.limit/opt/apigee/edge-message-processor/conf ディレクトリを作成し、 次のように設定されている値を確認します。
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. 上記のコマンドのサンプル結果は次のとおりです。
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. 上記の出力例では、プロパティ HTTPResponse.headers.limithttp.properties の値 25k に設定されています。

    これは、Apigee for Private で構成されたレスポンス ペイロード サイズの上限を示しています。 クラウドは 25 KB です。

Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合

診断情報の収集が必要な場合

次の診断情報を収集して、Apigee Edge サポートに連絡してください。

Public Cloud ユーザーの場合は、次の情報を提供します。

  • 組織名
  • 環境名
  • API プロキシ名
  • 502 エラーの再現に使用する完全な curl コマンド
  • API リクエストのトレース ファイル
  • ターゲット/バックエンド サーバーからのレスポンスの完全な出力とヘッダーのサイズ

Private Cloud ユーザーの場合は、次の情報を提供します。

  • 失敗したリクエストについて観測された完全なエラー メッセージ
  • 組織名
  • 環境名
  • API プロキシ バンドル
  • 失敗した API リクエストのトレース ファイル
  • 502 エラーの再現に使用する完全な curl コマンド
  • ターゲット/バックエンド サーバーからのレスポンスの完全な出力とヘッダーのサイズ
  • 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