503 Dienst nicht verfügbar – Proxy-Tunnel konnte nicht mit 403 erstellt werden

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

403 - Forbidden

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

503 - Service Unavailable

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.

504 - Gateway Timeout

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:

  1. 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 mit Proxy refused to create tunnel with response status 403 zu reproduzieren.
  2. Achten Sie darauf, dass Show all FlowInfos aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  5. 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

  6. Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  7. 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:

    ( größeres Bild ansehen)

    ( größeres Bild ansehen)

  8. 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:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-503 Service Unavailable-Fehlern ermitteln.
  2. 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.

  3. Prüfen Sie, ob während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) 503-Fehler mit dem Fehlercode protocol.http.ProxyTunnelCreationFailed aufgetreten sind oder ob Anfragen immer noch mit 503 fehlschlagen.
  4. 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

  1. 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.
  2. Prüfen Sie die Fehlermeldung und ermitteln Sie den in der faultstring angegebenen Statuscode für das Fehlschlagen der Tunnelerstellung.
  3. In diesem Szenario lautet der Statuscode 403 und bedeutet Verboten.
  4. 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.
  5. 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.
  6. Je nach Art der Firewall- und/oder ACL-Einschränkungen müssen Sie das Problem entsprechend beheben.
  7. 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:

    1. 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.
    2. Gehen Sie zur Phase Zielanfragefluss gestartet und überprüfen Sie die Anfrageheader
    3. Überprüfen Sie den Wert des Hostnamens, der im Abschnitt Anfrageheader unter Host-Header angegeben ist.
    4. Wenn der Header Host den Proxy-Hostnamen enthält, ist das die Ursache für den Fehler.
    5. 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.
    6. 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

      ( größeres Bild ansehen)

      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 Fehler Proxy refused to create tunnel with response status 403 angezeigt.

    tcpdump

    Host-Header mit „tcpdump“ ermitteln

    1. 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.

    2. Analysieren Sie die tcpdump-Daten mit dem Wireshark-Tool oder einem ähnlichen Tool.
    3. Hier sehen Sie eine Beispielanalyse des tcpdump mit Wireshark:

      ( größeres Bild ansehen)

    4. Die Paketnummern 13, 14 und 15 zeigen, dass der Message Processor über einen dreiseitigen TCP-Handshake eine Verbindung zum Proxyserver herstellt.
    5. Im Paket 16 hat sich der Message Processor mit dem Proxy-Host httpbin.org verbunden (im Beispiel oben).
    6. 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.

    7. 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-Headers httpin.org zu erstellen, schlägt er daher mit dem Fehler Proxy refused to create tunnel with response status 403 fehl.

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:

  1. 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>
    
  2. Stellen Sie sicher, dass die anderen Eigenschaften für den Weiterleitungs-Proxy auf dem Message Processor wie folgt konfiguriert sind:

    1. Überprüfen Sie die Datei /opt/apigee/customer/application/message-processor.properties auf jedem der Message Processor.
    2. 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
      

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
    

Verweise