502 Bad Gateway – TooBigHeaders

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 502 Bad Gateway mit dem Fehlercode protocol.http.TooBigHeaders .

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

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-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet werden, das zulässige Limit in Apigee Edge überschreitet.

Mögliche Ursachen für diesen Fehler:

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

Allgemeine Diagnoseschritte

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

API-Monitoring

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

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

  3. Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Sie können den Filter Proxy auswählen, um den Fehlercode einzugrenzen.
  6. Stellen Sie den Fehlercode der Zeit gegenüber.
  7. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.TooBigHeaders aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  8. Sie sehen die Informationen zum Fehlercode protocol.http.TooBigHeaders wie unten dargestellt:

    ( 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 Fehlercode den Wert protocol.http.TooBigHeaders hat, weist dies darauf hin, dass die HTTP-Antwort des Ziel-/Back-End-Servers Header enthält, deren Größe das zulässige Limit in Apigee Edge überschreitet.

Trace-Tool

  1. Aktivieren Sie die Trace-Sitzung und entweder:
    1. Warten Sie, bis der Fehler 502 Bad Gateway auftritt, oder
    2. Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie den 502 Bad Gateway-Fehler.
  2. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  3. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  4. In der Regel tritt dieser Fehler im Ablauf mit dem Namen Error direkt nach der Phase Anfrage an Zielserver gesendet auf, wie unten dargestellt:

    ( größeres Bild ansehen)

    Notieren Sie sich die Fehlerwerte aus dem Trace:

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

    Dies weist darauf hin, dass Apigee Edge (Message Processor-Komponente) den Fehler ausgibt, sobald die Antwort vom Back-End-Server empfangen wird, da die Headergröße das zulässige Limit überschreitet.

  5. Sie sehen den Fehler in der von Apigee Edge gesendeten Fehlerantwort Response Sent to Client (Antwort an Client gesendet), wie unten dargestellt:

    ( größeres Bild ansehen)

  6. Notieren Sie sich die Fehlerwerte aus dem Trace. Das obige Beispiel-Trace zeigt:
    • Fehler: 502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf, um die zugehörigen Details zu sehen.

    ( größeres Bild ansehen)

    Beachten Sie den Wert des folgenden Elements:

    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 mithilfe von NGINX-Zugriffslogs:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-502 Bad Gateway ermitteln.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

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

  3. Suchen Sie, ob während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) 502-Fehler mit dem Fehlercode protocol.http.TooBigHeaders aufgetreten sind oder ob es immer noch Anfragen mit 502 gibt, die fehlschlagen.
  4. Wenn Sie 502-Fehler mit dem X-Apigee-fault-code finden, der dem Wert von X-Apigee-fault-code entspricht, ermitteln Sie den Wert von X-Apigee-fault-code .

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

    Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-code :

    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. Bestimmen Sie den Fehlercode, die Fehlerquelle und die Größe der Antwortnutzlast für den Fehler, der mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs beobachtet wird, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn die Fehlerquelle den Wert target hat, weist dies darauf hin, dass die vom Ziel-/Back-End-Server an Apigee gesendete Antwort Header enthält, deren Größe über dem zulässigen Limit in Apigee Edge liegt.
  3. Mit einer der folgenden Methoden können Sie prüfen, ob die Antwort des Ziels/Back-Ends Header enthält, deren Größe das zulässige Limit überschreitet:

    Fehlermeldung

    So validieren Sie mithilfe der Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die faultstring. 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 in faultstring, dass die Antwort Header enthält, deren Gesamtgröße das zulässige Limit überschreitet.

    Tatsächliche Anfrage

    So validieren Sie mithilfe der tatsächlichen Anfrage:

    Wenn Sie Zugriff auf die eigentliche Anfrage an den Ziel-/Back-End-Server haben, führen Sie die folgenden Schritte aus:

    1. Wenn Sie ein Nutzer einer öffentlichen Cloud oder einer privaten Cloud sind, stellen Sie vom Back-End-Server selbst oder von einer anderen Maschine, von der Sie die Anfrage an den Back-End-Server senden dürfen, eine Anfrage direkt an den Back-End-Server.
    2. Wenn Sie ein Private Cloud-Nutzer sind, können Sie die Anfrage von einem der Message Processor auch an den Back-End-Server senden.
    3. Prüfen Sie die vom Back-End-Server empfangene Antwort. Berechnen und prüfen Sie insbesondere die Gesamtgröße der Header, die in der Antwort übergeben werden.
    4. Wenn Sie feststellen, dass die Größe der Header in der Antwortnutzlast das zulässige Limit in Apigee Edge übersteigt, dann 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 höhere Größen. Dies ist die Ursache für diesen Fehler, da er das zulässige Limit in Apigee Edge überschreitet.

    Message Processor-Protokolle

    So validieren Sie mithilfe von Message Processor-Protokollen:

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

    1. Prüfen Sie die Protokolle des Nachrichtenverarbeiters:

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

    2. Suchen Sie, ob während eines bestimmten Zeitraums 502-Fehler aufgetreten sind (ob das Problem in der Vergangenheit aufgetreten ist) oder ob Anfragen mit 502 immer noch fehlschlagen. Sie können dazu den folgenden Suchstring verwenden:
      grep -ri "response headers size exceeding"
      
    3. Die Linien von system.log sehen in etwa so aus. 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 Back-End/Zielserver erhält und feststellt, dass die Gesamtgröße der Header mehr als 25 KB beträgt, stoppt er und gibt den folgenden Fehler aus:

      response headers size exceeding 25,600

      Dies impliziert, dass die Gesamt-Header-Größe mehr als 25 KB beträgt und Apigee den Fehler ausgibt, wenn die Größe beginnt, den Grenzwert von 25 KB mit dem Fehlercode protocol.http.TooBigHeaders zu überschreiten.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Beheben Sie das Problem, dass die Zielserveranwendung keine Header sendet, die das Apigee-Limit überschreiten.

  1. Analysieren Sie den Grund für das Senden des Antwortheaders auf dem jeweiligen Zielserver, der das unter Limits definierte Limit überschreitet.
  2. Wenn dies nicht gewünscht ist, ändern Sie Ihre Back-End-Serveranwendung so, dass sie Antwortheader sendet, deren Größe unter dem zulässigen Limit in Apigee Edge liegt.
  3. Prüfen Sie, ob die Header-Informationen als Teil des Antworttexts gesendet werden können.
  4. Senden Sie nach Möglichkeit umfangreiche Informationen, die Sie als Teil des Headers im Antworttext senden wollten. Dadurch wird das Limit für Antwortheader nicht überschritten.

CwC

Option 2 : CwC-Attribut verwenden, um die Größenbeschränkung für den Antwortheader zu erhöhen

Apigee bietet eine CwC-Eigenschaft, mit der die Größenbeschränkung für Antwortheader erhöht werden kann. Einzelheiten finden Sie unter Limits für den Message Processor konfigurieren.

Einschränkungen

Apigee erwartet, dass die Clientanwendung und der Back-End-Server keine Header senden, die größer als das zulässige Limit sind, das unter Limits für Apigee Edge unter „Header-Größe für Anfrage/Antwort“ dokumentiert ist.

  1. Wenn Sie ein Nutzer der öffentlichen Cloud sind, ist die maximale Größe für die Größe von Anfrage- und Antwortheadern wie unter Größe des Anfrage-/Antwortheaders unter Limits für Apigee Edge beschrieben.
  2. Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise die maximale Standardgröße für die Größe von Anfrage- und Antwortheadern geändert (auch wenn dies nicht empfohlen wird). Sie können die maximale Größe des Antwortheaders anhand der Anleitung unter Aktuelle Begrenzung prüfen ermitteln.

Wie überprüfe ich das aktuelle Limit?

In diesem Abschnitt wird erläutert, wie Sie überprüfen können, ob die Eigenschaft 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 dem Attribut HTTPResponse.headers.limit und prüfen Sie, welcher Wert wie unten dargestellt festgelegt wurde:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Das Ergebnis des obigen Befehls sieht so aus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. In der obigen Beispielausgabe wurde das Attribut HTTPResponse.headers.limit auf den Wert 25k in http.properties festgelegt.

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

Wenn Sie weiterhin Unterstützung vom Apigee-Support benötigen, lesen Sie Diagnoseinformationen müssen erfasst werden.

Erfassen von Diagnoseinformationen erforderlich

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

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

  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Name
  • Führen Sie den Befehl curl aus, mit dem der Fehler 502 reproduziert wurde
  • Ablaufverfolgungsdatei für die API-Anfragen
  • Vollständige Ausgabe der Antwort vom Ziel-/Back-End-Server zusammen mit der Größe der Header

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

  • Vollständige Fehlermeldung bei fehlgeschlagenen Anfragen
  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für fehlgeschlagenen API-Anfragen
  • Führen Sie den Befehl curl aus, mit dem der Fehler 502 reproduziert wurde
  • Vollständige Ausgabe der Antwort vom Ziel-/Back-End-Server zusammen mit der Größe der Header
  • NGINX-Zugriffslogs /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

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

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