<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.tunneling
は false
に設定する必要があります。
エラーコード: 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 ) |
原因としては、ファイアウォールまたは ACL の制限が トンネルの作成を妨げるバックエンド サーバーのことです。 |
プロキシがトンネルの作成を拒否しました(レスポンス ステータスが 503 ) |
この問題は、DNS の問題、ファイアウォールの制限、バックエンド サーバーの トンネルを作成できません。 |
プロキシがトンネルの作成を拒否(レスポンス ステータス 504) |
これは、トンネルの作成時にタイムアウトが発生した場合に発生することがあります。 |
faultstring
で確認されたステータス コードに応じて、以下を使用する必要があります。
適切な手法を導入する必要があります。このハンドブックでは、Google Compute Engine の
faultstring
にステータス コード 403
が表示されている場合、この問題
(エラーコード protocol.http.ProxyTunnelCreationFailed
の場合)。
考えられる原因
このエラー(ステータス コード 403
)は、ファイアウォールまたは ACL(アクセス
コントロール リストなど)の制限がバックエンド サーバー上に設定された
プロキシ サーバーによって Apigee Edge とバックエンド サーバーの間で作成されます。
原因 | 説明 | トラブルシューティングの実施対象 |
---|---|---|
プロキシがレスポンス ステータス 403 のトンネルの作成を拒否した | プロキシ サーバーがプロキシ サーバーのホスト名を受け取ると、トンネルの作成を拒否する
Host ヘッダーのバックエンド サーバーのホスト名に置き換えます。 |
Edge Private Cloud ユーザーのみ |
共通の診断手順
このエラーを診断するには、次のいずれかのツールまたは手法を使用します。
Trace ツール
Trace ツールを使用してエラーを診断するには:
- トレース セッションを有効にして、
次のいずれかです。
<ph type="x-smartling-placeholder">
- </ph>
- エラーが発生するのを待つ。または
- 問題を再現できる場合は、API 呼び出しを行って問題を再現してください。
503 Service Unavailable
Proxy refused to create tunnel with response status 403
に置き換えます。
[Show all FlowInfos] が有効になっていることを確認します。
- 失敗したリクエストのいずれかを選択し、トレースを調べます。
- トレースのさまざまなフェーズを順に確認し、障害が発生している場所を特定する 発生しました。
このエラーは通常、Target Request Flow Started フェーズの後に表示されます。 次のように指定します。
次の点に注意してください。
エラー:
Proxy refused to create tunnel with response status 403
- トレースの [AX(Analytics Data Recorded)] フェーズに移動してクリックします。
[Phase Details] の [Response Headers] セクションまで下にスクロールします。 X-Apigee-fault-codeX-Apigee-fault-code と X-Apigee-fault-sourceX-Apigee-fault-code の値を 下に示します。
( 拡大画像を表示)
( 拡大画像を表示)
X-Apigee-fault-code と X-Apigee-fault-source の値が表示されます。 が
protocol.http.ProxyTunnelCreationFailed
とtarget
となり、このエラーがプロキシ トンネルの 想定されるホストヘッダーが受信されないため、作成に失敗しました。レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーは、NGINX アクセスログを使用して次のことを行えます。
HTTP
503 Service Unavailable
に関する重要な情報を確認する エラーになります。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
ここで、 ORG、ORG、PORT# は実際の値に置き換えられます。
- エラーコードを含む
503
エラーがないか検索します 特定の期間にprotocol.http.ProxyTunnelCreationFailed
(ユーザーが 過去に発生した問題)またはイベントで引き続き失敗するリクエストが503
。 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">診断
- Trace ツールまたは NGINX アクセスログを使用して、
503 Service Unavailable
の障害コードと障害ソースを特定します。詳しくは、 一般的な診断手順。 - エラー メッセージを確認し、ステータス コードを特定します。
トンネルの作成で失敗した場合は
faultstring
に示されます。 - このシナリオでは、ステータス コードは
403
(Forbidden)になります。 - これは、トンネルを作成するための十分な権限または特権がないことを意味します。この場合、 ファイアウォールまたは ACL(アクセス制御リスト)制限が トンネルの作成を防止できます
- バックエンド サーバーで構成されているファイアウォールや ACL 制限がないか確認し、 トンネルの作成を妨げる可能性があります。
- ファイアウォールや ACL 制限のタイプに応じて、問題を修正する必要がある 適切に分類します
この問題をトラブルシューティングして解決する方法を説明するために、ファイアウォールの制限の例を見てみましょう。 issue:
シナリオ: バックエンド サーバーのファイアウォール制限により、ホストヘッダーは常に バックエンド サーバーのホスト名を含める
次のいずれかの方法で、Apigee Edge から渡されたホストヘッダーを特定できます。
トレース
Trace を使用してホストヘッダーを確認するには:
- トレースを使用して、
faultstring
にProxy refused to create tunnel with response status 403
が含まれていることを確認します。 一般的な診断手順。 - [Target Request Flow Started ] フェーズに移動して、 リクエスト ヘッダー
- [Host ヘッダー] で指定したホスト名の値を確認します。 リクエスト ヘッダー セクション。
- Host ヘッダーにプロキシホスト名が含まれている場合は、それが 確認してください。
- これは、ファイアウォールがバックエンド サーバーで、 ホストヘッダーにバックエンド サーバーの名前が含まれている場合にのみ、リクエストが送信されます。
- プロキシ サーバーがバックエンド サーバーとの間でトンネルを作成しようとすると、
エラーで失敗する
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 を使用してホストヘッダーを特定する
送信元のリクエストに対してプロキシ サーバー上の
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.- 次を使用して
tcpdump
データを分析します: Wireshark ツールなど ツールです。 このスライドは、Chronicle の <ph type="x-smartling-placeholder"></ph> tcpdump Wireshark を使用する場合:
( 拡大画像を表示)
- パケット番号 13、14、15 は、メッセージが プロセッサが、3 方向 TCP を介してプロキシ サーバーへの接続を確立しています handshake プロセスがあります
- パケット 16 で、Message Processor はプロキシホストに接続しています。
httpbin.org
(上記の例を参照)。 パケット 16 を選択し、パケットの内容を詳しく調べます。 具体的には、Message によってプロキシ サーバーに渡される Host Header です。 データ処理者
- 上記のサンプルは、ホストヘッダー
httpin.org
を示しています。 プロキシサーバーのホスト名です。そのため、プロキシ サーバーが 上記のホストヘッダーを渡して、バックエンド サーバーとのトンネルを作成します。httpin.org
の場合は、エラーProxy refused to create tunnel with response status 403
で失敗します。
- トレースを使用して、
解決策
シナリオ: プロキシ サーバーのファイアウォール制限により、ホストヘッダーは 常にバックエンド サーバーのホスト名を含める
このエラーの原因がバックエンド サーバーのファイアウォール ルールで動作していることが ホストヘッダーに常にバックエンド サーバーが含まれていると想定するように設定されている Message Processor がプロキシ サーバーのホスト名を送信している間、次の処理を実行します。 次の手順で問題を解決できます。
次のコードで、プロパティ
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">関連する他のプロパティも <ph type="x-smartling-placeholder"></ph> 転送プロキシが Message Processor で次のように構成されます。
- 各 Message Processor で
/opt/apigee/customer/application/message-processor.properties
ファイルを確認します。 ユースケースや要件に応じて、次のプロパティが設定されていることを確認してください。
宿泊施設の値の例:
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">
- 各 Message Processor で
診断情報の収集が必要な場合
上記の手順でも問題が解決しない場合は、以下の情報を収集します。 Apigee Edge サポートにお問い合わせください。
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
参照
- <ph type="x-smartling-placeholder"></ph> 転送プロキシを構成する
- <ph type="x-smartling-placeholder"></ph> SSL トンネリング