Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 503 Service Unavailable mit dem Fehlercode protocol.http.ProxyTunnelCreationFailed als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
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"
}
}
}Weiterleitungsproxy und Tunneling
Mit Apigee Edge können Ihre API-Proxys über einen Proxy
server mit Ihrem Backend-Server kommunizieren, wie unter
Weiterleitungsproxy konfigurieren erläutert. Der Proxyserver öffnet je nach Proxyservertyp (angegeben
durch die Eigenschaft HTTPClient.proxy.type) eine sichere (HTTPS) oder nicht sichere (HTTP) Verbindung zum Backend-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. Wenn Sie Tunneling deaktivieren möchten, muss die Eigenschaft
HTTPClient.use.tunneling auf false gesetzt werden.
Fehlercode: protocol.http.ProxyTunnelCreationFailed
Apigee Edge gibt den Fehlercode protocol.http.ProxyTunnelCreationFailed zurück, wenn der
Proxyserver aufgrund von Problemen wie Firewall-, ACL- (Access Control List-)Einschränkungen, DNS-Problemen, Nichtverfügbarkeit des Backend-Servers, Zeitüberschreitungen usw. keinen Tunnel zwischen Apigee Edge und dem Backend-Server erstellen kann.
Der Statuscode im faultstring der Antwort von Apigee Edge gibt in der Regel
eine mögliche Ursache auf hoher Ebene an, die zu diesem Fehler geführt hat.
Faultstring-Vorlage :
Proxy refused to create tunnel with response status STATUS_CODE
Mögliche Ursachen für einige der im Faultstring beobachteten Statuscodes :
In der folgenden Tabelle werden mögliche Ursachen je nach Statuscode im
faultstring beschrieben:
| Faultstring | Beschreibung |
|---|---|
Proxy refused to create tunnel with response status 403 |
Dies kann möglicherweise auf Firewall- oder ACL-Einschränkungen zurückzuführen sein, die auf dem Backend-Server konfiguriert sind und die Erstellung eines Tunnels verhindern. |
Proxy refused to create tunnel with response status 503 |
Dies kann auf DNS-Probleme, Firewalleinschränkungen oder die Nichtverfügbarkeit des Backend-Servers zurückzuführen sein, die die Erstellung eines Tunnels verhindern. |
| Proxy refused to create tunnel with response status 504 |
Dies kann passieren, wenn es bei der Erstellung des Tunnels zu Zeitüberschreitungen kommt. |
Je nach Statuscode im faultstring müssen Sie geeignete Methoden zur Fehlerbehebung verwenden. In diesem Playbook wird erläutert, wie Sie das Problem beheben
, wenn im faultstring
für den Fehlercode protocol.http.ProxyTunnelCreationFailed der Statuscode 403 angezeigt wird.
Mögliche Ursachen
Dieser Fehler (Statuscode 403) tritt auf, wenn auf dem Backend-Server Firewall- oder ACL- (Access
Control List-)Einschränkungen konfiguriert sind, die verhindern, dass der Proxyserver einen Tunnel zwischen Apigee Edge und dem Backend-Server erstellt.
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| Proxy refused to create tunnel with response status 403 | Der Proxyserver weigert sich, den Tunnel zu erstellen, da er im Host Header den Hostnamen des Proxyservers anstelle des Hostnamens des Backend-Servers erhält. |
Nur für Edge Private Cloud-Nutzer |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools/Verfahren, um diesen Fehler zu diagnostizieren:
Trace-Tool
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und
führen Sie einen der folgenden Schritte aus:
- Warten Sie, bis der Fehler auftritt.
- Wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf, um das Problem
503 Service UnavailablemitProxy refused to create tunnel with response status 403. zu reproduzieren.
Achten Sie darauf, dass Alle FlowInfos einblenden aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und untersuchen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Traces durch und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Der Fehler wird in der Regel nach der Phase Target Request Flow Started angezeigt, wie unten dargestellt:
Notieren Sie sich 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 Phasendetails Antwortheader und ermitteln Sie die Werte von X-Apigee-fault-code und X-Apigee-fault-source wie unten dargestellt:
Die Werte von X-Apigee-fault-code und X-Apigee-fault-source sind
protocol.http.ProxyTunnelCreationFailedundtarget. Dies bedeutet, dass dieser Fehler auftritt, weil die Erstellung des Proxy-Tunnels fehlgeschlagen ist, da der erwartete Host-Header nicht empfangen wurde.Antwortheader Wert X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffslogs:
- Wenn Sie Private Cloud-Nutzer sind, können Sie NGINX-Zugriffslogs verwenden, um die wichtigsten Informationen zu HTTP
503 Service UnavailableFehlern zu ermitteln. Prüfen Sie die NGINX-Zugriffslogs:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logDabei werden: ORG, ORG und PORT# durch tatsächliche Werte ersetzt.
- Suchen Sie nach
503-Fehlern mit dem Fehlercodeprotocol.http.ProxyTunnelCreationFailedin einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit503fehlschlagen. Wenn Sie
503Fehler finden, bei denen der X-Apigee-fault-code mit dem Wert vonprotocol.http.ProxyTunnelCreationFailedübereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.Beispiel für einen 503-Fehler aus dem NGINX-Zugriffslog :
Der obige Beispielseintrag aus dem NGINX-Zugriffslog hat die folgenden Werte für X- Apigee-fault-code und X-Apigee-fault-source:
Antwortheader Wert X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
Ursache: Proxy refused to create tunnel with response status 403
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für
503 Service Unavailablemit dem Trace-Tool oder den NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert. - Prüfen Sie die Fehlermeldung und ermitteln Sie den Statuscode
im
faultstringfür den Fehler bei der Erstellung des Tunnels. - In diesem Szenario ist der Statuscode
403, was Unzulässig bedeutet. - Das bedeutet, dass nicht genügend Rechte oder Berechtigungen zum Erstellen des Tunnels vorhanden sind. Dies kann in der Regel passieren, wenn Firewall- oder ACL- (Access Control List-)Einschränkungen die Erstellung des Tunnels verhindern.
- Prüfen Sie alle Firewall- und/oder ACL-Einschränkungen, die auf Ihrem Backend-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 eine Beispiel-Firewalleinschränkung an, um zu erklären, wie Sie dieses Problem beheben können:
Szenario: Firewalleinschränkung auf dem Backend-Server erwartet, dass der Host-Header immer den Hostnamen des Backend-Servers enthält
Sie können eine der folgenden Methoden verwenden, um den von Apigee Edge übergebenen Host-Header zu ermitteln:
Trace
So ermitteln Sie den Host-Header mit Trace:
- Achten Sie darauf, dass der
faultstringProxy refused to create tunnel with response status 403enthält, wie unter Allgemeine Diagnoseschritte erläutert. - Gehen Sie zur Phase Target Request Flow Started und prüfen Sie die Anfrageheader
- Prüfen Sie den Wert des Hostnamens im Host-Header im Abschnitt Anfrageheader.
- Wenn der Host-Header den Hostnamen des Proxys enthält, ist dies die Ursache für diesen Fehler.
- Das liegt daran, dass die Firewall auf dem Backend-Server so konfiguriert ist, dass Anfragen nur akzeptiert werden, wenn der Host-Header den Namen des Backend-Servers enthält.
- Wenn der Proxyserver also versucht, den Tunnel mit dem Backend-Server zu erstellen, schlägt dies mit dem Fehler
Proxy refused to create tunnel with response status 403fehl.Beispiel für einen Trace, in dem der Host-Header den Hostnamen des Proxys enthält
Im obigen Beispiel-Trace ist zu sehen, dass der Host-Header den Namen des Proxy-Hosts enthält
www.proxyserver.com.Da auf dem Backend-Server eine Firewalleinschränkung konfiguriert ist, die erwartet, dass nur der Hostname des Backend-Servers im Host-Header enthalten ist, erhalten Sie den FehlerProxy refused to create tunnel with response status 403.
tcpdump
So ermitteln Sie den Host-Header mit tcpdump:
Erfassen Sie einen
tcpdumpauf dem Proxyserver für die Anfragen, die von der Message Processor-Komponente von Apigee Edge stammen, mit dem folgenden Befehl:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Weitere Informationen zur Verwendung des Befehls
tcpdumpfinden Sie unter tcpdump.- Analysieren Sie die
tcpdump-Daten mit dem Wireshark-Tool oder einem ähnlichen Tool. Hier ist eine Beispielanalyse des `tcpdump` mit Wireshark:
- Die Paketnummern 13, 14 und 15 zeigen, dass der Message Processor über einen dreifachen TCP-Handshake-Prozess eine Verbindung zum Proxyserver herstellt.
- In Paket 16 hat der Message Processor eine Verbindung zum Proxy-Host
httpbin.orghergestellt (siehe oben). Wählen Sie Paket 16 aus und prüfen Sie den Inhalt des Pakets im Detail, insbesondere den Host-Header , der vom Message Processor an den Proxyserver übergeben wird.
- Das obige Beispiel zeigt den Host-Header
httpin.org, der ist der Hostname des Proxyservers. Wenn der Proxyserver also versucht, den Tunnel mit dem Backend-Server zu erstellen, indem er den obigen Host-Headerhttpin.orgübergibt, schlägt dies mit dem FehlerProxy refused to create tunnel with response status 403fehl.
- Achten Sie darauf, dass der
Auflösung
Szenario: Firewalleinschränkung auf dem Proxyserver erwartet, dass der Host-Header immer den Hostnamen des Backend-Servers enthält
Wenn Sie festgestellt haben, dass dieser Fehler auftritt, weil die Firewall auf dem Backend-Server so konfiguriert ist, dass sie erwartet, dass der Host-Header immer den Hostnamen des Backend-Servers enthält, während der Message Processor den Hostnamen des Proxyservers sendet, führen Sie die folgenden Schritte aus, um das Problem zu beheben:
Setzen Sie die Eigenschaft
use.proxy.host.header.with.target.uriim TargetEndpoint auf „true“, wie im folgenden Beispiel gezeigt:Beispiel für eine 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>Achten Sie darauf, dass die anderen Eigenschaften im Zusammenhang mit dem Weiterleitungsproxy auf dem Message Processor wie folgt konfiguriert sind:
- Prüfen Sie die Datei
/opt/apigee/customer/application/message-processor.propertiesauf jedem Message Processor. Achten Sie darauf, dass die folgenden Eigenschaften entsprechend Ihrem Anwendungsfall oder Ihren Anforderungen festgelegt sind:
Beispielwerte für Eigenschaften :
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
- Prüfen Sie die Datei
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:
Wenn Sie Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
- Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
- Name der Umgebung
- API-Proxy-Bundle
- Trace-Datei für die API-Anfragen
NGINX-Zugriffslogs
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.
Systemlogs des Message Processors
/opt/apigee/var/log/edge-message-processor/logs/system.log