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

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 503 Service Unavailable mit dem Fehlercode protocol.http.ProxyTunnelCreationFailed als Antwort für API-Aufrufe.

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 Tunneling

Apigee Edge ermöglicht Ihren API-Proxys die Kommunikation mit Ihrem Backend-Server über einen Proxy wie im Artikel <ph type="x-smartling-placeholder"></ph> Konfigurieren Sie den Weiterleitungsproxy. Der Proxyserver öffnet eine sichere (HTTPS) oder eine nicht sichere HTTP-Verbindung zum Back-End-Server abhängig vom Proxytyp (angegebener Wert) von der Property HTTPClient.proxy.type) verwendet 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 des Tunnelings HTTPClient.use.tunneling muss auf false festgelegt werden.

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

Fehlercode: Protocol.http.ProxyTunnelCreationFailed

Apigee Edge gibt den Fehlercode protocol.http.ProxyTunnelCreationFailed zurück, wenn die Proxyserver kann aus folgenden Gründen keinen Tunnel zwischen Apigee Edge und dem Backend-Server erstellen Probleme wie Firewall, ACL-Einschränkungen (Access Control List), DNS-Probleme, Backend-Server Nichtverfügbarkeit, Zeitüberschreitungen usw.

Der Statuscode im faultstring der Antwort von Apigee Edge ist normalerweise zeigt eine mögliche übergeordnete Ursache an, die zu diesem Fehler geführt hat.

Vorlage für Fehlerstrings:

Proxy refused to create tunnel with response status STATUS_CODE

Mögliche Ursachen für einen Teil des Statuscodes im Fehlerstring:

Die folgende Tabelle beschreibt mögliche Ursachen abhängig vom Statuscode, der im faultstring:

Fehlerstring Beschreibung
Proxy konnte keinen Tunnel mit dem Antwortstatus „403“ erstellen

403 - Forbidden

Dies kann durch Firewall- oder ACL-Einschränkungen verursacht werden, die im Backend-Server, der die Tunnelerstellung verhindert.

Proxy konnte keinen Tunnel mit dem Antwortstatus „503“ erstellen

503 - Service Unavailable

Dies kann durch DNS-Probleme, Firewall-Einschränkungen, Nichtverfügbarkeit, die das Erstellen des Tunnels verhindert

Proxy konnte keinen Tunnel mit Antwortstatus 504 erstellen

504 - Gateway Timeout

Dies kann passieren, wenn bei der Tunnelerstellung Zeitüberschreitungen auftreten.

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

Abhängig vom Statuscode, der in faultstring angezeigt wird, müssen Sie geeignete Techniken zur Behebung des Problems anwenden. In diesem Playbook wird erläutert, wie Sie das Problem, wenn der Statuscode 403 in der faultstring für den Fehlercode protocol.http.ProxyTunnelCreationFailed.

Mögliche Ursachen

Dieser Fehler (Statuscode 403) tritt auf, wenn eine Firewall oder ACL (Zugriffsrechte) vorhanden ist Kontrollliste) auf dem Backend-Server konfigurierte Einschränkungen, die verhindern, vom Proxyserver zwischen Apigee Edge und dem Backend-Server erstellt wird.

<ph type="x-smartling-placeholder">
Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Proxy konnte keinen Tunnel mit Antwortstatus 403 erstellen Der Proxyserver weigert sich, den Tunnel zu erstellen, da er den Hostnamen des Proxyservers empfängt anstelle des Hostnamens des Back-End-Servers im Host-Header. Nur Edge Private Cloud-Nutzer

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools oder Techniken, um diesen Fehler zu diagnostizieren:

Trace-Tool

So diagnostizieren Sie den Fehler mit dem Trace-Tool:

  1. Aktivieren Sie die Trace-Sitzung und Entweder: <ph type="x-smartling-placeholder">
      </ph>
    • Warten Sie, bis der Fehler auftritt, oder
    • Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um es zu reproduzieren. 503 Service Unavailable mit Proxy refused to create tunnel with response status 403.
  2. Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Verschiedene Phasen des Trace durchgehen und ermitteln, wo der Fehler auftritt aufgetreten.
  5. Der Fehler wird normalerweise nach der Phase Zielanfragefluss gestartet angezeigt. wie unten dargestellt:

    Beachten Sie die folgenden Informationen:

    Fehler: Proxy refused to create tunnel with response status 403

  6. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  7. Scrollen Sie nach unten zum Abschnitt Phase Details Response Headers (Antwortheader) und Ermitteln Sie die Werte von X-Apigee-fault-code und X-Apigee-fault-code als (siehe unten):

    ( Größeres Bild ansehen)

    ( Größeres Bild ansehen)

  8. Sie sehen die Werte X-Apigee-fault-code und X-Apigee-Fehlerquelle. als protocol.http.ProxyTunnelCreationFailed bzw. target . Dies ist ein Hinweis darauf, dass dieser Fehler verursacht wird, weil der Proxy-Tunnel Die Erstellung ist fehlgeschlagen, da der erwartete Host-Header nicht empfangen wurde.

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

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

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

  1. Als Private Cloud-Nutzer können Sie NGINX-Zugriffslogs für folgende Zwecke verwenden: die wichtigsten Informationen zu HTTP 503 Service Unavailable bestimmen Fehler.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

    Dabei gilt:ORG, ORG und PORT# werden durch tatsächliche Werte ersetzt.

  3. Nach 503-Fehlern mit Fehlercode suchen protocol.http.ProxyTunnelCreationFailed während eines bestimmten Zeitraums (wenn der in der Vergangenheit aufgetreten ist) oder wenn immer noch Anfragen mit 503
  4. Wenn Sie 503 -Fehler mit dem X-Apigee-Fehlercode finden die dem Wert von protocol.http.ProxyTunnelCreationFailed entsprechen, Bestimmen Sie dann den Wert von X-Apigee-fault-source..

    Beispielfehler 503 aus dem NGINX-Zugriffsprotokoll:

    Der obige Beispieleintrag aus dem NGINX-Zugriffsprotokoll enthält die folgenden Werte für X- Apigee-Fehlercode und X-Apigee-Fehler-Quelle:

    Antwortheader Wert
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Ursache: Proxy konnte keinen Tunnel mit dem Antwortstatus 403 erstellen

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

Diagnose

  1. Ermitteln Sie den Fehlercode und die Fehlerquelle für 503 Service Unavailable mithilfe des Trace-Tools oder von NGINX-Zugriffslogs, wie unter Häufige Diagnoseschritte.
  2. Prüfen Sie die Fehlermeldung und ermitteln Sie den Statuscode. in der faultstring für einen Fehler bei der Tunnelerstellung angegeben ist.
  3. In diesem Szenario lautet der Statuscode 403, was Verboten bedeutet.
  4. Dies bedeutet, dass nicht genügend Rechte oder Berechtigungen zum Erstellen des Tunnels vorhanden sind. Dies könnte treten in der Regel auf, wenn Firewall- oder ACL-Einschränkungen (Access Control List) vorliegen, verhindern die Erstellung des Tunnels.
  5. Überprüfen Sie alle auf Ihrem Backend-Server konfigurierten Firewall- und/oder ACL-Einschränkungen, die kann die Erstellung des Tunnels verhindern.
  6. Je nach Art der Firewall und/oder ACL-Einschränkungen müssen Sie das Problem beheben. angemessen.
  7. Sehen wir uns ein Beispiel für eine Firewalleinschränkung an, um zu erklären, wie Sie dieses Problem beheben können. Problem:

    Szenario: Die Firewalleinschränkung auf dem Back-End-Server erwartet, dass der Hostheader immer erfolgen sollte Backend-Server-Hostnamen enthalten

    Sie können eine der folgenden Möglichkeiten verwenden, um den von Apigee Edge übergebenen Host-Header zu ermitteln:

    Trace

    So ermitteln Sie den Host-Header mithilfe von Trace:

    1. Prüfen Sie, ob die faultstring Proxy refused to create tunnel with response status 403 enthält. Verwenden Sie dazu Trace, wie unter Häufige Diagnoseschritte.
    2. Gehen Sie zur Phase Target Request Flow Started (Zielanfragefluss gestartet) und überprüfen Sie die Anfrageheader
    3. Prüfen Sie den Wert des Hostnamens, der im Host-Header in der Anfrageheader.
    4. Wenn der Host-Header den Proxy-Hostnamen enthält, ist dies der Ursache des Fehlers.
    5. Dies liegt daran, dass die Firewall auf dem Back-End-Server so konfiguriert ist, dass sie den wird nur dann angefragt, wenn der Host-Header den Namen des Back-End-Servers enthält.
    6. Wenn der Proxyserver versucht, den Tunnel mit dem Back-End-Server zu erstellen, schlägt mit dem Fehler fehl

      Proxy refused to create tunnel with response status 403.

      Beispiel-Trace, das einen Hostheader mit einem Proxy-Hostnamen zeigt

      ( Größeres Bild ansehen)

      Im oben gezeigten Beispiel-Trace ist zu sehen, dass der Host Header den Namen des Proxy-Hosts. www.proxyserver.com. Da eine eine auf dem Back-End-Server konfigurierte Firewalleinschränkung, die nur die der im Host Header enthalten sein muss, erhalten Sie den Fehler Proxy refused to create tunnel with response status 403.

    tcpdump

    So ermitteln Sie den Host-Header mithilfe von „tcpdump“:

    1. tcpdump auf dem Proxyserver für die Anfragen von die Message Processor-Komponente von Apigee Edge mit dem folgenden Befehl:

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

      Weitere Informationen zur Verwendung des Befehls tcpdump finden Sie unter <ph type="x-smartling-placeholder"></ph> tcpdump.

    2. Analysieren Sie die tcpdump-Daten mithilfe des Wireshark-Tool oder ähnliches .
    3. Hier ist eine Beispielanalyse <ph type="x-smartling-placeholder"></ph> tcpdump mit Wireshark:

      ( Größeres Bild ansehen)

    4. Die Paketnummern 13, 14 und 15 zeigen an, dass die Nachricht Prozessor stellt Verbindung zum Proxyserver über ein Drei-Wege-TCP her Handshake-Vorgang ein.
    5. In Paket 16 hat der Message Processor eine Verbindung zum Proxyhost hergestellt httpbin.org (siehe Beispiel oben).
    6. Wählen Sie Paket 16 aus und prüfen Sie den Inhalt des Pakets im Detail. Dabei handelt es sich um den Host-Header, der von der Nachricht an den Proxyserver übergeben wird. Prozessor.

    7. Im obigen Beispiel sehen Sie den Host Header httpin.org, der ist der Hostname des Proxy-Servers. Wenn der Proxyserver versucht, Erstellen Sie den Tunnel mit dem Backend-Server, indem Sie den obigen Host-Header übergeben. httpin.org schlägt sie mit dem Fehler Proxy refused to create tunnel with response status 403 fehl.

Auflösung

Szenario: Die Firewalleinschränkung auf dem Proxyserver erwartet, dass der Hostheader Hostname des Backend-Servers immer enthalten

Wenn Sie festgestellt haben, dass dieser Fehler verursacht wird, weil die Firewall auf dem Backend-Server so konfiguriert ist, dass erwartet wird, dass der Host-Header immer einen backend-Server enthalten sollte und der Message Processor den Hostnamen des Proxyservers sendet, führen Sie die folgenden Schritte, um das Problem zu beheben:

  1. Legen Sie das Attribut use.proxy.host.header.with.target.uri im TargetEndpoint, wie im folgenden Beispiel gezeigt:

    TargetEndpoint-Beispielkonfiguration:

    <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. Achten Sie darauf, dass die anderen Unterkünfte, die sich auf <ph type="x-smartling-placeholder"></ph> Weiterleitungs-Proxy werden im Message Processor so konfiguriert:

    1. Überprüfen Sie die Datei /opt/apigee/customer/application/message-processor.properties auf jedem Message Processor.
    2. Die folgenden Attribute müssen gemäß Ihrem Anwendungsfall oder Ihren Anforderungen festgelegt sein:

      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
      
      <ph type="x-smartling-placeholder">

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:

Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

  • Vollständige Fehlermeldung für fehlgeschlagene Anfragen
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für API-Anfragen
  • NGINX-Zugriffslogs

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

    Dabei gilt:ORG, ENV und PORT# werden durch tatsächliche Werte ersetzt.

  • Systemprotokolle für Message Processor

    /opt/apigee/var/log/edge-message-processor/logs/system.log
    

Verweise