Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
Die Clientanwendung erhält als Antwort auf API-Aufrufe den HTTP-Statuscode 503 Service Unavailable
mit dem Fehlercode protocol.http.ProxyTunnelCreationFailed
.
Fehlermeldung
Die Clientanwendung ruft den folgenden Antwortcode ab:
HTTP/1.1 503 Service Unavailable
Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Forward-Proxy und Tunnelling
Apigee Edge ermöglicht Ihren API-Proxys die Kommunikation mit Ihrem Back-End-Server über einen Proxyserver, wie unter
Weiterleitungs-Proxy konfigurieren erläutert. Der Proxyserver öffnet je nach verwendetem Proxytyp (wird durch das Attribut HTTPClient.proxy.type
angegeben) eine sichere (HTTPS-) oder nicht sichere (HTTP-)Verbindung zum Back-End-Server und überträgt die Daten in beide Richtungen. Dies wird als Tunneling bezeichnet.
Standardmäßig verwendet Apigee Edge Tunneling für den gesamten Traffic. Zum Deaktivieren von Tunneling muss das Attribut HTTPClient.use.tunneling
auf false
festgelegt werden.
Fehlercode: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge gibt den Fehlercode protocol.http.ProxyTunnelCreationFailed
zurück, wenn der Proxyserver aufgrund von Problemen wie Firewall, ACL-Einschränkungen (Access Control List), DNS-Problemen, Nichtverfügbarkeit des Back-End-Servern, Zeitüberschreitungen usw. keinen Tunnel zwischen Apigee Edge und dem Back-End-Server erstellen kann.
Der Statuscode in der faultstring
der Antwort von Apigee Edge weist in der Regel auf eine mögliche allgemeine Ursache hin, die zu diesem Fehler geführt hat.
Vorlage für Fehlerstring:
Proxy refused to create tunnel with response status STATUS_CODE
Mögliche Ursachen für einen in „Fehlerstring“ beobachteten Statuscode:
In der folgenden Tabelle werden mögliche Ursachen je nach dem in faultstring
angegebenen Statuscode beschrieben:
Faultstring | Beschreibung |
---|---|
Der Proxy hat das Erstellen eines Tunnels mit dem Antwortstatus „403 “ abgelehnt |
Dies kann möglicherweise durch Firewall- oder ACL-Einschränkungen auf dem Back-End-Server geschehen, die das Erstellen eines Tunnels verhindern. |
Der Proxy hat das Erstellen eines Tunnels mit dem Antwortstatus „503 “ abgelehnt |
Dies kann an DNS-Problemen, Firewalleinschränkungen oder der Nichtverfügbarkeit des Back-End-Servers liegen, die das Erstellen eines Tunnels verhindern |
Der Proxy hat die Erstellung eines Tunnels mit dem Antwortstatus 504 abgelehnt. |
Dies kann passieren, wenn es beim Erstellen des Tunnels zu Zeitüberschreitungen kommt |
Abhängig vom in faultstring
beobachteten Statuscode müssen Sie geeignete Techniken zur Fehlerbehebung verwenden. In diesem Playbook wird erläutert, wie Sie das Problem beheben, wenn der Statuscode 403
in faultstring
für den Fehlercode protocol.http.ProxyTunnelCreationFailed
angezeigt wird.
Mögliche Ursachen
Dieser Fehler (Statuscode 403
) tritt auf, wenn auf dem Back-End-Server Firewall- oder ACL-Einschränkungen (Access Control List) konfiguriert sind, die verhindern, dass der Tunnel zwischen Apigee Edge und dem Back-End-Server durch den Proxyserver erstellt wird.
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Proxy hat die Erstellung eines Tunnels mit dem Antwortstatus 403 abgelehnt | Der Proxyserver weigert sich, den Tunnel zu erstellen, da er den Hostnamen des Proxyservers anstelle des Hostnamens des Back-End-Servers im Host -Header empfängt. |
Nur Edge Private Cloud-Nutzer |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Methoden, um diesen Fehler zu diagnostizieren:
Trace-Tool
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und entweder:
- Warten Sie, bis der Fehler auftritt, oder
- Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um das Problem
503 Service Unavailable
mitProxy refused to create tunnel with response status 403
zu reproduzieren.
Achten Sie darauf, dass Show all FlowInfos aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
Der Fehler tritt in der Regel nach der Phase Zielanfragefluss gestartet auf, wie unten dargestellt:
Beachten Sie die folgenden Informationen:
Fehler:
Proxy refused to create tunnel with response status 403
- Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phase Details Response Headers und ermitteln Sie die Werte von X-Apigee-Fehler-Code und X-Apigee-Fehler-Quelle, wie unten gezeigt:
Sie sehen die Werte von X-Apigee-fault-code und X-Apigee-fault-code als
protocol.http.ProxyTunnelCreationFailed
bzw.target
. Dies weist darauf hin, dass dieser Fehler verursacht wird, weil der Proxy-Tunnel erstellt wurde, da der erwartete Host-Header nicht empfangen wird.Antwortheader Wert X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-
503 Service Unavailable
-Fehlern ermitteln. Prüfen Sie die NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Wo:ORG, ORG und PORT# werden durch die tatsächlichen Werte ersetzt.
- Prüfen Sie, ob während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist)
503
-Fehler mit dem Fehlercodeprotocol.http.ProxyTunnelCreationFailed
aufgetreten sind oder ob Anfragen immer noch mit503
fehlschlagen. Wenn Sie
503
-Fehler mit dem X-Apigee-fault-code finden, der dem Wert von X-Apigee-fault-code entspricht, bestimmen Sie den Wert von X-Apigee-fault-code .Beispiel für einen 503-Fehler aus dem NGINX-Zugriffslog:
Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X- Apigee-Fehler-Code und X-Apigee-Fehler-Quelle:
Antwortheader Wert X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Ursache: Der Proxy hat die Tunnelerstellung mit dem Antwortstatus 403 abgelehnt
Diagnose
- Bestimmen Sie den Fehlercode und die Fehlerquelle für
503 Service Unavailable
mithilfe des Trace-Tools oder der NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert. - Prüfen Sie die Fehlermeldung und ermitteln Sie den in der
faultstring
angegebenen Statuscode für das Fehlschlagen der Tunnelerstellung. - In diesem Szenario lautet der Statuscode
403
und bedeutet Verboten. - Dies bedeutet, dass die Rechte oder Berechtigungen nicht ausreichen, um den Tunnel zu erstellen. Dies kann in der Regel passieren, wenn Firewall- oder ACL-Einschränkungen (Access Control List) vorliegen, die das Erstellen des Tunnels verhindern.
- Prüfen Sie alle Firewall- und/oder ACL-Einschränkungen, die auf Ihrem Back-End-Server konfiguriert sind und die Erstellung des Tunnels verhindern können.
- Je nach Art der Firewall- und/oder ACL-Einschränkungen müssen Sie das Problem entsprechend beheben.
Sehen wir uns ein Beispiel für eine Firewalleinschränkung an, um zu erklären, wie Sie dieses Problem beheben können:
Szenario: Firewalleinschränkung auf dem Back-End-Server erwartet, dass der Hostheader immer den Hostnamen des Back-End-Servers enthalten sollte
Sie können mit einer der folgenden Methoden den von Apigee Edge übergebenen Host-Header ermitteln:
Trace
So ermitteln Sie den Host-Header mithilfe von Trace:
- Mithilfe von Trace können Sie prüfen, ob
faultstring
Proxy refused to create tunnel with response status 403
enthält. Eine Erläuterung hierzu finden Sie unter Allgemeine Diagnoseschritte. - Gehen Sie zur Phase Zielanfragefluss gestartet und überprüfen Sie die Anfrageheader
- Überprüfen Sie den Wert des Hostnamens, der im Abschnitt Anfrageheader unter Host-Header angegeben ist.
- Wenn der Header Host den Proxy-Hostnamen enthält, ist das die Ursache für den Fehler.
- Das liegt daran, dass die Firewall auf dem Back-End-Server so konfiguriert ist, dass sie die Anfragen nur akzeptiert, wenn der Host-Header den Namen des Back-End-Servers enthält.
- Wenn der Proxyserver also versucht, den Tunnel mit dem Back-End-Server zu erstellen, schlägt er mit dem Fehler fehl.
Proxy refused to create tunnel with response status 403
.Beispiel-Trace, die zeigt, dass der Hostheader einen Proxy-Hostnamen hat
Im oben gezeigten Beispiel-Trace ist zu sehen, dass der Host-Header den Namen des Proxy-Hosts enthält.
www.proxyserver.com.
Da auf dem Back-End-Server eine Firewalleinschränkung konfiguriert ist, die erwartet, dass nur der Back-End-Server-Hostname im Host-Header enthalten ist, wird der FehlerProxy refused to create tunnel with response status 403
angezeigt.
tcpdump
Host-Header mit „tcpdump“ ermitteln
Erfassen Sie mit dem folgenden Befehl eine
tcpdump
auf dem Proxyserver für die Anfragen, die von der Message Processor-Komponente von Apigee Edge stammen:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Weitere Informationen zur Verwendung des Befehls
tcpdump
finden Sie unter tcpdump.- Analysieren Sie die
tcpdump
-Daten mit dem Wireshark-Tool oder einem ähnlichen Tool. Hier sehen Sie eine Beispielanalyse des tcpdump mit Wireshark:
- Die Paketnummern 13, 14 und 15 zeigen, dass der Message Processor über einen dreiseitigen TCP-Handshake eine Verbindung zum Proxyserver herstellt.
- Im Paket 16 hat sich der Message Processor mit dem Proxy-Host
httpbin.org
verbunden (im Beispiel oben). Wählen Sie das Paket 16 aus und untersuchen Sie den Inhalt des Pakets im Detail, insbesondere den Host-Header, der vom Nachrichtenprozessor an den Proxyserver übergeben wird.
- Im Beispiel oben sehen Sie den Host-Header
httpin.org
, den Hostnamen des Proxyservers. Wenn der Proxyserver versucht, den Tunnel mit dem Back-End-Server durch Übergeben des obigen Host-Headershttpin.org
zu erstellen, schlägt er daher mit dem FehlerProxy refused to create tunnel with response status 403
fehl.
- Mithilfe von Trace können Sie prüfen, ob
Auflösung
Szenario: Firewalleinschränkung auf dem Proxyserver erwartet, dass der Hostheader immer den Hostnamen des Back-End-Servers enthalten sollte
Wenn Sie festgestellt haben, dass dieser Fehler verursacht wird, weil die Firewall auf dem Back-End-Server so konfiguriert ist, dass der Host-Header immer den Hostnamen des backend-Servers enthalten soll, während der Message Processor den Hostnamen des backend sendet, dann führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Legen Sie das Attribut
use.proxy.host.header.with.target.uri
in TargetEndpoint auf „true“ fest, wie im folgenden Beispiel gezeigt:TargetEndpoint-Konfiguration:
<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>
Stellen Sie sicher, dass die anderen Eigenschaften für den Weiterleitungs-Proxy auf dem Message Processor wie folgt konfiguriert sind:
- Überprüfen Sie die Datei
/opt/apigee/customer/application/message-processor.properties
auf jedem der Message Processor. Achten Sie darauf, dass die folgenden Attribute entsprechend Ihrem Anwendungsfall oder Ihren Anforderungen festgelegt sind:
Beispielwerte für Attribute:
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
- Überprüfen Sie die Datei
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anleitung weiterhin besteht, stellen Sie die folgenden Diagnoseinformationen zusammen und wenden Sie sich an den Apigee Edge-Support:
Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Ablaufverfolgungsdatei für die API-Anfragen
NGINX-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Wo:ORG, ENV und PORT# werden durch die tatsächlichen Werte ersetzt.
Systemprotokolle von Message Processor
/opt/apigee/var/log/edge-message-processor/logs/system.log