503 Service Unavailable - 403 でプロキシ トンネルの作成失敗

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

症状

クライアント アプリケーションは、次のコードで HTTP ステータス コード 503 Service Unavailable を取得します。 API 呼び出しのレスポンスとしてエラーコード protocol.http.ProxyTunnelCreationFailed が返されます。

エラー メッセージ

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

HTTP/1.1 503 Service Unavailable

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

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

転送プロキシとトンネリング

Apigee Edge では、API プロキシがプロキシ経由でバックエンド サーバーと通信できます。 説明されているので、 <ph type="x-smartling-placeholder"></ph> 転送プロキシを構成する。プロキシ サーバーがセキュア(HTTPS)またはセキュアでない プロキシタイプに応じて、バックエンド サーバーへの(HTTP)接続 プロパティ( HTTPClient.proxy.typeごとに使用し、データを転送します。 構成する必要がありますこれはトンネリングと呼ばれます。

デフォルトでは、Apigee Edge はすべてのトラフィックにトンネリングを使用します。トンネリングを無効にするには、 HTTPClient.use.tunnelingfalse に設定する必要があります。

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

エラーコード: Protocol.http.ProxyTunnelCreationFailed

次の場合、Apigee Edge はエラーコード protocol.http.ProxyTunnelCreationFailed を返します。 次のエラーにより、プロキシ サーバーが Apigee Edge とバックエンド サーバーの間にトンネルを作成できない。 ファイアウォール、ACL(アクセス制御リスト)制限、DNS 問題、バックエンド サーバーなどの問題 使用不能、タイムアウトなども発生します。

通常、Apigee Edge からのレスポンスの faultstring のステータス コード は、このエラーの原因として考えられるおおまかな原因を示します。

Faultstring テンプレート:

Proxy refused to create tunnel with response status STATUS_CODE

faultstring で確認されたステータス コードの一部について、考えられる原因は次のとおりです。

次の表に、 faultstring:

障害文字列 説明
プロキシがトンネルの作成を拒否しました(レスポンス ステータスが 403

403 - Forbidden

原因としては、ファイアウォールまたは ACL の制限が トンネルの作成を妨げるバックエンド サーバーのことです。

プロキシがトンネルの作成を拒否しました(レスポンス ステータスが 503

503 - Service Unavailable

この問題は、DNS の問題、ファイアウォールの制限、バックエンド サーバーの トンネルを作成できません。

プロキシがトンネルの作成を拒否(レスポンス ステータス 504)

504 - Gateway Timeout

これは、トンネルの作成時にタイムアウトが発生した場合に発生することがあります。

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

faultstring で確認されたステータス コードに応じて、以下を使用する必要があります。 適切な手法を導入する必要があります。このハンドブックでは、Google Compute Engine の faultstringステータス コード 403 が表示されている場合、この問題 (エラーコード protocol.http.ProxyTunnelCreationFailed の場合)。

考えられる原因

このエラー(ステータス コード 403)は、ファイアウォールまたは ACL(アクセス コントロール リストなど)の制限がバックエンド サーバー上に設定された プロキシ サーバーによって Apigee Edge とバックエンド サーバーの間で作成されます。

<ph type="x-smartling-placeholder">
原因 説明 トラブルシューティングの実施対象
プロキシがレスポンス ステータス 403 のトンネルの作成を拒否した プロキシ サーバーがプロキシ サーバーのホスト名を受け取ると、トンネルの作成を拒否する Host ヘッダーのバックエンド サーバーのホスト名に置き換えます。 Edge Private Cloud ユーザーのみ

共通の診断手順

このエラーを診断するには、次のいずれかのツールまたは手法を使用します。

Trace ツール

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

  1. トレース セッションを有効にして、 次のいずれかです。 <ph type="x-smartling-placeholder">
      </ph>
    • エラーが発生するのを待つ。または
    • 問題を再現できる場合は、API 呼び出しを行って問題を再現してください。 503 Service Unavailable Proxy refused to create tunnel with response status 403 に置き換えます。
  2. [Show all FlowInfos] が有効になっていることを確認します。

  3. 失敗したリクエストのいずれかを選択し、トレースを調べます。
  4. トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
  5. このエラーは通常、Target Request Flow Started フェーズの後に表示されます。 次のように指定します。

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

    エラー: Proxy refused to create tunnel with response status 403

  6. トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
  7. [Phase Details] の [Response Headers] セクションまで下にスクロールします。 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を 下に示します。

    ( 拡大画像を表示

    ( 拡大画像を表示

  8. X-Apigee-fault-codeX-Apigee-fault-source の値が表示されます。 protocol.http.ProxyTunnelCreationFailedtarget となり、このエラーがプロキシ トンネルの 想定されるホストヘッダーが受信されないため、作成に失敗しました。

    レスポンス ヘッダー
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

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

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

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

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

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

  3. エラーコードを含む 503 エラーがないか検索します 特定の期間に protocol.http.ProxyTunnelCreationFailed(ユーザーが 過去に発生した問題)またはイベントで引き続き失敗するリクエストが 503
  4. X-Apigee-fault-code に 503 エラーがある場合 protocol.http.ProxyTunnelCreationFailed の値と一致するもの) 次に、X-Apigee-fault-source. の値を確認します。

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

    NGINX アクセスログの上記のサンプル エントリには、X- Apigee-fault-code X-Apigee-fault-source:

    レスポンス ヘッダー
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

原因: プロキシがレスポンス ステータス 403 のトンネルの作成を拒否した

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

診断

  1. Trace ツールまたは NGINX アクセスログを使用して、503 Service Unavailable障害コード障害ソースを特定します。詳しくは、 一般的な診断手順
  2. エラー メッセージを確認し、ステータス コードを特定します。 トンネルの作成で失敗した場合は faultstring に示されます。
  3. このシナリオでは、ステータス コードは 403Forbidden)になります。
  4. これは、トンネルを作成するための十分な権限または特権がないことを意味します。この場合、 ファイアウォールまたは ACL(アクセス制御リスト)制限が トンネルの作成を防止できます
  5. バックエンド サーバーで構成されているファイアウォールや ACL 制限がないか確認し、 トンネルの作成を妨げる可能性があります。
  6. ファイアウォールや ACL 制限のタイプに応じて、問題を修正する必要がある 適切に分類します
  7. この問題をトラブルシューティングして解決する方法を説明するために、ファイアウォールの制限の例を見てみましょう。 issue:

    シナリオ: バックエンド サーバーのファイアウォール制限により、ホストヘッダーは常に バックエンド サーバーのホスト名を含める

    次のいずれかの方法で、Apigee Edge から渡されたホストヘッダーを特定できます。

    トレース

    Trace を使用してホストヘッダーを確認するには:

    1. トレースを使用して、faultstringProxy refused to create tunnel with response status 403 が含まれていることを確認します。 一般的な診断手順
    2. [Target Request Flow Started ] フェーズに移動して、 リクエスト ヘッダー
    3. [Host ヘッダー] で指定したホスト名の値を確認します。 リクエスト ヘッダー セクション。
    4. Host ヘッダーにプロキシホスト名が含まれている場合は、それが 確認してください。
    5. これは、ファイアウォールがバックエンド サーバーで、 ホストヘッダーバックエンド サーバーの名前が含まれている場合にのみ、リクエストが送信されます。
    6. プロキシ サーバーがバックエンド サーバーとの間でトンネルを作成しようとすると、 エラーで失敗する

      Proxy refused to create tunnel with response status 403

      ホストヘッダーにプロキシホスト名があるサンプル トレース

      ( 拡大画像を表示

      上記のサンプル トレースでは、[Host Header] に次が含まれていることがわかります。 プロキシ ホストの名前。www.proxyserver.com. バックエンド サーバーで構成されたファイアウォール制限で、 バックエンド サーバーのホスト名を [ Host Header] に含めると、 エラー Proxy refused to create tunnel with response status 403

    tcpdump

    tcpdump を使用してホストヘッダーを特定する

    1. 送信元のリクエストに対してプロキシ サーバー上の tcpdump をキャプチャします。 Apigee Edge の Message Processor コンポーネントを以下のコマンドに置き換えます。

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      tcpdump コマンドの使用方法の詳細については、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> tcpdump.

    2. 次を使用して tcpdump データを分析します: Wireshark ツールなど ツールです。
    3. このスライドは、Chronicle の <ph type="x-smartling-placeholder"></ph> tcpdump Wireshark を使用する場合:

      ( 拡大画像を表示

    4. パケット番号 131415 は、メッセージが プロセッサが、3 方向 TCP を介してプロキシ サーバーへの接続を確立しています handshake プロセスがあります
    5. パケット 16 で、Message Processor はプロキシホストに接続しています。 httpbin.org(上記の例を参照)。
    6. パケット 16 を選択し、パケットの内容を詳しく調べます。 具体的には、Message によってプロキシ サーバーに渡される Host Header です。 データ処理者

    7. 上記のサンプルは、ホストヘッダー httpin.org を示しています。 プロキシサーバーのホスト名です。そのため、プロキシ サーバーが 上記のホストヘッダーを渡して、バックエンド サーバーとのトンネルを作成します。 httpin.org の場合は、エラー Proxy refused to create tunnel with response status 403 で失敗します。

解決策

シナリオ: プロキシ サーバーのファイアウォール制限により、ホストヘッダーは 常にバックエンド サーバーのホスト名を含める

このエラーの原因がバックエンド サーバーのファイアウォール ルールで動作していることが ホストヘッダーに常にバックエンド サーバーが含まれていると想定するように設定されている Message Processor がプロキシ サーバーのホスト名を送信している間、次の処理を実行します。 次の手順で問題を解決できます。

  1. 次のコードで、プロパティ use.proxy.host.header.with.target.uri を true に設定します。 次の例に示す TargetEndpoint:

    TargetEndpoint 構成の例:

    <TargetEndpoint name="default">
      <HTTPTargetConnection>
        <URL>https://mocktarget.apigee.net/json</URL>
        <Properties>
          <Property name="use.proxy.host.header.with.target.uri">true</Property>
        </Properties>
      </HTTPTargetConnection>
    </TargetEndpoint>
    
    <ph type="x-smartling-placeholder">
  2. 関連する他のプロパティも <ph type="x-smartling-placeholder"></ph> 転送プロキシが Message Processor で次のように構成されます。

    1. 各 Message Processor で /opt/apigee/customer/application/message-processor.properties ファイルを確認します。
    2. ユースケースや要件に応じて、次のプロパティが設定されていることを確認してください。

      宿泊施設の値の例:

      conf_http_HTTPClient.use.proxy=true
      conf/http.properties+HTTPClient.proxy.type=HTTP
      conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME
      conf/http.properties+HTTPClient.proxy.port=PORT_#
      conf/http.properties+HTTPClient.proxy.user=USERNAME
      conf/http.properties+HTTPClient.proxy.password=PASSWORD
      
      <ph type="x-smartling-placeholder">

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

上記の手順でも問題が解決しない場合は、以下の情報を収集します。 Apigee Edge サポートにお問い合わせください。

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
    

参照