502 Bad Gateway – TooBigHeaders

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 502 Bad Gateway mit Fehlercode protocol.http.TooBigHeaders als Antwort auf API Aufrufe.

Fehlermeldung

Die Clientanwendung erhält den folgenden Antwortcode:

HTTP/1.1 502 Bad Gateway

Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:

{
   "fault":{
      "faultstring":"response headers size exceeding 25,600",
      "detail":{
         "errorcode":"protocol.http.TooBigHeaders"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt auf, wenn die Gesamtgröße der Header, die vom Ziel-/Backend Server als Teil der HTTP-Antwort an Apigee Edge gesendet werden, das zulässige zulässige Limit in Apigee Edge überschreitet.

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Die Größe der Header in der Antwort überschreitet das zulässige Limit. Die Headergröße eines bestimmten Headers oder die Summe der Headergrößen aller Header, die vom Ziel-/Backend-Server als Teil der HTTP-Antwort an Apigee Edge gesendet werden, überschreitet das zulässige Limit in Apigee Edge. Nutzer von Edge Public und Private Cloud

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools/Verfahren, um diesen Fehler zu diagnostizieren:

API-Monitoring

So diagnostizieren Sie den Fehler mit dem API-Monitoring:

  1. Melden Sie sich in der Apigee Edge-UI als Nutzer mit einer geeigneten Rolle an.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
  5. Sie können den Filter Proxy auswählen, um den Fehlercode einzugrenzen.
  6. Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
  7. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.TooBigHeaders aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  8. Die Informationen zum Fehlercode protocol.http.TooBigHeaders werden wie unten dargestellt angezeigt:

    ( größeres Bild ansehen)

  9. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.

    ( größeres Bild ansehen)

  10. Notieren Sie sich im Fenster Logs die folgenden Details:
    • Statuscode:502
    • Fehlerquelle:target
    • Fehlercode:protocol.http.TooBigHeaders.
  11. Wenn die Fehlerquelle den Wert target und der Fehler Code den Wert protocol.http.TooBigHeaders hat, bedeutet das, dass die HTTP-Antwort vom Ziel-/Backend-Server Header enthält, deren Größe das zulässige Limit in Apigee Edge überschreitet.

Trace-Tool

  1. Aktivieren Sie die Trace-Sitzung und führen Sie einen der folgenden Schritte aus:
    1. Warten Sie, bis der Fehler 502 Bad Gateway auftritt.
    2. Wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf und reproduzieren Sie den 502 Bad Gateway Fehler.
  2. Wählen Sie eine der fehlgeschlagenen Anfragen aus und untersuchen Sie den Trace.
  3. Gehen Sie die verschiedenen Phasen des Traces durch und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
  4. Normalerweise wird dieser Fehler im Ablauf Error direkt nach der Request sent to target server Phase angezeigt, wie unten dargestellt:

    ( größeres Bild ansehen)

    Notieren Sie sich die Werte des Fehlers aus dem Trace:

    • error:response headers size exceeding 25,600
    • error.class: com.apigee.errors.http.server.BadGateway

    Das bedeutet, dass Apigee Edge (Message Processor-Komponente) den Fehler auslöst, sobald die Antwort vom Backend-Server empfangen wird, da die Headergröße das zulässige Limit überschreitet.

  5. Der Fehler wird in der von Apigee Edge gesendeten Fehlerantwort Response Sent to Client angezeigt, wie unten dargestellt:

    ( größeres Bild ansehen)

  6. Notieren Sie sich die Werte des Fehlers aus dem Trace. Im obigen Beispiel-Trace wird Folgendes angezeigt:
    • Fehler:502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Rufen Sie im Trace die Phase AX (Analysedaten aufgezeichnet) auf und klicken Sie darauf, um die zugehörigen Details zu sehen.

    ( größeres Bild ansehen)

    Notieren Sie sich den Wert der folgenden Elemente:

    Fehlerheader Wert
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target
    Fehlerinhalt: Text {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}

NGINX

So diagnostizieren Sie den Fehler mit NGINX-Zugriffsprotokollen:

  1. Wenn Sie Nutzer der Private Cloud sind, können Sie NGINX-Zugriffsprotokolle verwenden, um die wichtigsten Informationen zu HTTP 502 Bad Gateway zu ermitteln.
  2. Prüfen Sie die NGINX-Zugriffsprotokolle:

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

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

  3. Suchen Sie nach 502-Fehlern mit dem Fehlercode protocol.http.TooBigHeaders in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit 502 fehlschlagen.
  4. Wenn Sie 502 Fehler finden, bei denen der X-Apigee-fault-code mit dem Wert protocol.http.TooBigHeaders übereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.

    Beispiel für einen 502-Fehler aus dem NGINX-Zugriffsprotokoll:

    Der obige Beispiel-Eintrag aus dem NGINX-Zugriffsprotokoll hat die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-source:

    Fehlerheader Wert
    X-Apigee-fault-code protocol.http.TooBigHeaders
    X-Apigee-fault-source target

Ursache: Die Größe der Header in der Antwort überschreitet das zulässige Limit.

Diagnose

  1. Ermitteln Sie den Fehlercode, die Fehlerquelle und die Größe der Antwortnutzlast für den beobachteten Fehler mithilfe des API-Monitorings, des Trace-Tools oder der NGINX-Zugriffsprotokolle, wie unter Allgemeine Diagnoseschritte beschrieben.
  2. Wenn die Fehlerquelle den Wert target hat, bedeutet das, dass die Antwort, die vom Ziel-/Backend-Server an Apigee gesendet wurde, Header enthält, deren Größe das zulässige Limit in Apigee Edge überschreitet.
  3. Sie können mit einer der folgenden Methoden prüfen, ob die Antwort vom Ziel-/Backend-Server Header enthält, deren Größe das zulässige Limit überschreitet:

    Fehlermeldung

    So prüfen Sie die Inhaberschaft einer Property mit einer Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung haben, die Sie von Apigee Edge erhalten haben, dann sehen Sie sich den faultstring an. Der faultstring gibt an, dass die Größe des Antwortheaders das zulässige Limit überschritten hat.

    Beispiel für eine Fehlermeldung:

    "faultstring":"response headers size exceeding 25,600"

    Beachten Sie in der obigen Fehlermeldung im faultstring, dass die Antwort Header enthält, deren Gesamtgröße das zulässige Limit überschreitet.

    Tatsächliche Anfrage

    So prüfen Sie die Inhaberschaft einer Property mit der tatsächlichen Anfrage:

    Wenn Sie Zugriff auf die tatsächliche Anfrage haben, die an den Ziel-/Backend-Server gesendet wurde, führen Sie die folgenden Schritte aus:

    1. Wenn Sie Nutzer der Public Cloud/Private Cloud sind, stellen Sie eine Anfrage direkt an den Backend-Server vom Backend-Server selbst oder von einem anderen Computer aus, von dem aus Sie die Anfrage an den Backend-Server senden dürfen.
    2. Wenn Sie Nutzer der Private Cloud sind, können Sie die Anfrage auch von einem der Message Processors an den Backend-Server senden.
    3. Untersuchen Sie die vom Backend-Server empfangene Antwort und berechnen und prüfen Sie insbesondere die Gesamtgröße der in der Antwort übergebenen Header.
    4. Wenn Sie feststellen, dass die Größe der Header in der Antwortnutzlast das zulässige Limit in Apigee Edge überschreitet, ist dies die Ursache des Problems.

      Beispielantwort vom Zielserver:

      curl -v https://TARGET_SERVER_HOST/test
      
      * About to connect() to 10.1.0.10 port 9000 (#0)
      *   Trying 10.1.0.10...
      * Connected to 10.1.0.10 (10.1.0.10) port 9000 (#0)
      > GET /test HTTP/1.1
      > User-Agent: curl/7.29.0
      > Host: 10.1.0.10:9000
      > Accept: */*
      <
      < HTTP/1.1 200 OK
      < Accept-Ranges: bytes
      < Content-Length: 0
      < Content-Type: text/plain; charset=utf-8
      < Last-Modified: Tue, 20 Jul 2021 09:23:56 GMT
      < Testheader1: XVlBzgba—-<snipped>---THctcuAx
      < Testheader2: hxKQFDaFpLSj—-<snipped>---FbcXoEFfRsWxP
      < Date: Fri, 23 Jul 2021 09:51:22 GMT
      <
      * Connection #0 to host 10.1.0.10 left intact
      

      Im obigen Beispiel haben Testheader1 und Testheader2 größere Größen, was die Ursache für diesen Fehler ist, da das zulässige Limit in Apigee Edge überschritten wird.

    Message Processor-Logs

    So prüfen Sie die Inhaberschaft einer Property mit Message Processor-Logs:

    Wenn Sie Nutzer der Private Cloud sind, können Sie Message Processor-Logs verwenden, um zu prüfen, ob die Größe der Antwortheader das zulässige Limit in Apigee Edge überschritten hat.

    1. Prüfen Sie die Message Processor-Logs:

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

    2. Suchen Sie nach 502-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit 502 fehlschlagen. Sie können die folgende Suchanfrage verwenden:
      grep -ri "response headers size exceeding"
      
    3. Sie finden Zeilen aus system.log, die den folgenden ähneln. Die Größe der Antwortheader kann in Ihrem Fall variieren:
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest rev:1
      messageid:r23ijb1b-1  NIOThread@1 ERROR HTTP.CLIENT -
      HTTPClient$Context$3.onException() :  ClientChannel[Connected:
      Remote:3.7.1.1:9000 Local:192.168.2.1:56098]@8414 useCount=1
      bytesRead=0 bytesWritten=207 age=640ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response headers size exceeding 25,600
      
      2021-07-23 08:25:12,307 org:myorg env:prod api:bigheadertest
      rev:1 messageid:r23ijb1b-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@31f3ef88, response headers size exceeding 25,600)
    4. Sobald der Message Processor die Antwort vom Backend-/Ziel server erhält und feststellt, dass die Gesamtgröße der Header 25 KB überschreitet, wird der Vorgang beendet und der folgende Fehler ausgelöst:

      response headers size exceeding 25,600

      Das bedeutet, dass die Gesamtgröße des Headers mehr als 25 KB beträgt und Apigee den Fehler auslöst, wenn die Größe das Limit von 25 KB mit dem Fehlercode als protocol.http.TooBigHeaders überschreitet.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie die Zielserveranwendung so, dass sie keine Header sendet, deren Größe das Apigee-Limit überschreitet

  1. Analysieren Sie den Grund dafür, dass der bestimmte Zielserver eine Antwortheadergröße sendet, die das in Limits definierte zulässige Limit überschreitet.
  2. Wenn dies nicht gewünscht ist, ändern Sie Ihre Backend-Serveranwendung so, dass sie Antwortheader sendet, deren Größe das zulässige Limit in Apigee Edge nicht überschreitet.
  3. Prüfen Sie, ob die Headerinformationen als Teil des Antworttexts gesendet werden können.
  4. Senden Sie nach Möglichkeit alle großen Informationen, die Sie als Teil des Headers senden wollten, im Antworttext. So wird sichergestellt, dass Sie das Limit für Antwort header nicht überschreiten.

CwC

Option 2 : Verwenden Sie die CwC-Property, um das Limit für die Größe der Antwortheader zu erhöhen.

Apigee bietet eine CwC-Property, mit der das Limit für die Größe der Antwortheader erhöht werden kann. Weitere Informationen finden Sie unter Limits für den Message Processor konfigurieren

Limits

Apigee erwartet, dass die Clientanwendung und der Backend-Server keine Headergrößen senden, die das zulässige Limit überschreiten, wie unter Größe von Anfrage-/Antwortheadern in Apigee Edge-Limits dokumentiert.

  1. Wenn Sie Nutzer der Public Cloud sind, gilt das in Apigee Edge-Limits unter Größe von Anfrage-/Antwortheadern dokumentierte Limit für die Größe von Anfrage- und Antwortheadern.
  2. Wenn Sie Nutzer der Private Cloud sind, haben Sie möglicherweise das Standardlimit für die Größe von Anfrage- und Antwortheadern geändert (obwohl dies nicht empfohlen wird). Sie können das Limit für die maximale Größe von Antwortheadern ermitteln, indem Sie die Anleitung unter Aktuelles Limit prüfen befolgen.

Aktuelles Limit prüfen

In diesem Abschnitt wird erläutert, wie Sie prüfen, ob die Property HTTPResponse.headers.limit mit einem neuen Wert auf den Message Processors aktualisiert wurde.

  1. Suchen Sie auf dem Message Processor-Computer im Verzeichnis /opt/apigee/edge-message-processor/conf nach der Property HTTPResponse.headers.limit und prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Das Beispielergebnis des obigen Befehls sieht so aus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. Beachten Sie in der obigen Beispielausgabe, dass die Property HTTPResponse.headers.limit in http.properties auf den Wert 25k gesetzt wurde.

    Das bedeutet, dass das in Apigee für Private Cloud konfigurierte Limit für die Größe der Antwortnutzlast 25 KB beträgt.

Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.

Erfassen von Diagnoseinformationen erforderlich

Erfassen Sie die folgenden Diagnoseinformationen und wenden Sie sich dann an den Apigee Edge-Support:

Wenn Sie Nutzer der Public Cloud sind, geben Sie die folgenden Informationen an:

  • Name der Organisation
  • Name der Umgebung
  • Name des API-Proxys
  • Vollständiger curl-Befehl, der zum Reproduzieren des Fehlers 502 verwendet wurde
  • Trace-Datei für die API-Anfragen
  • Vollständige Ausgabe der Antwort vom Ziel-/Backend-Server zusammen mit der Größe der Header

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

  • Vollständige Fehlermeldung für die fehlgeschlagenen Anfragen
  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Bundle
  • Trace-Datei für die fehlgeschlagenen API-Anfragen
  • Vollständiger curl-Befehl, der zum Reproduzieren des Fehlers 502 verwendet wurde
  • Vollständige Ausgabe der Antwort vom Ziel-/Backend-Server zusammen mit der Größe der Header
  • NGINX-Zugriffsprotokolle /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

  • Message Processor-Systemprotokolle /opt/apigee/var/log/edge-message-processor/logs/system.log