502 Bad Gateway – TooBigHeaders

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

Symptom

Die Clientanwendung ruft den HTTP-Statuscode 502 Bad Gateway mit Fehlercode protocol.http.TooBigHeaders als Antwort für API Anrufe.

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 vom Ziel/Back-End gesendeten Header Server an Apigee Edge als Teil der HTTP-Antwort ist größer als zulässig zulässiges Limit in Apigee Edge.

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 Kopfzeilengröße eines bestimmten Titels oder die Summe der Kopfzeilengrößen aller Header, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet werden überschreitet das zulässige Limit in Apigee Edge. Edge-Nutzer von öffentlichen und privaten Clouds

Allgemeine Diagnoseschritte

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

API-Monitoring

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

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

  1. <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Sie können den Proxy-Filter auswählen, um den Fehlercode einzugrenzen.
  6. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
  7. Wählen Sie eine Zelle mit dem Fehlercode protocol.http.TooBigHeaders als (siehe unten):

    ( Größeres Bild ansehen)

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

    ( 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. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Statuscode: 502
    • Fehlerquelle: target
    • Fehlercode: protocol.http.TooBigHeaders.
  11. Wenn die Fehlerquelle den Wert target und den Fehler Code den Wert protocol.http.TooBigHeaders hat, bedeutet das, dass Die HTTP-Antwort vom Ziel-/Back-End-Server enthält Header, die größer sind als das zulässige Limit in Apigee Edge.

Trace-Tool

<ph type="x-smartling-placeholder">
  1. Aktivieren Sie die Trace-Sitzung. und entweder: <ph type="x-smartling-placeholder">
      </ph>
    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 Fehler 502 Bad Gateway.
  2. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  3. Verschiedene Phasen des Trace durchgehen und ermitteln, wo der Fehler auftritt aufgetreten.
  4. In der Regel sehen Sie diesen Fehler im Ablauf namens Error gleich hinter dem Anfrage an Zielserver gesendet:

    ( 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 gibt an, dass Apigee Edge (Message Processor-Komponente) den Fehler als sobald sie aufgrund einer Header-Größe die Antwort vom Back-End-Server erhält Überschreitung des zulässigen Grenzwerts.

  5. Der Fehler wird dann in der Antwort an den Client angezeigt. Fehlerantwort, die von Apigee Edge gesendet wurde (siehe unten):

    ( Größeres Bild ansehen)

  6. Notieren Sie sich die Fehlerwerte aus dem Trace. Der obige Beispiel-Trace zeigt Folgendes: <ph type="x-smartling-placeholder">
      </ph>
    • Fehler: 502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
  7. Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded). und klicken Sie darauf, um die zugehörigen Details anzuzeigen.

    ( Größeres Bild ansehen)

    Beachten Sie den folgenden Wert:

    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

<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-502 Bad Gateway ermitteln.
  2. Prüfen Sie die 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.

  3. Nach 502 Fehlern suchen mit Fehlercode protocol.http.TooBigHeaders während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) oder wenn immer noch Anfragen mit 502
  4. Wenn Sie 502-Fehler mit dem X-Apigee-Fehlercode finden dem Wert von protocol.http.TooBigHeaders entspricht, dann ermitteln Sie, Wert von X-Apigee-fault-source..

    Beispielfehler 502 aus dem NGINX-Zugriffsprotokoll:

    Der obige Beispieleintrag aus dem NGINX-Zugriffsprotokoll 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 die bei Verwendung von API-Überwachungs-, Trace-Tool- oder NGINX-Zugriffsprotokollen, wie unter Häufige Diagnoseschritte.
  2. Wenn die Fehlerquelle den Wert target hat, bedeutet dies, dass Die vom Ziel-/Back-End-Server an Apigee gesendete Antwort enthält Header, die größer sind als das zulässige Limit in Apigee Edge.
  3. Sie können überprüfen, ob die Antwort vom Ziel/Back-End Header enthält, deren Größe mit einer der folgenden Methoden größer als der zulässige Grenzwert ist:

    Fehlermeldung

    So führen Sie eine Validierung mithilfe der Fehlermeldung durch:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, dann Weitere Informationen finden Sie im faultstring. faultstring gibt an, dass Die Größe des Antwortheaders hat das zulässige Limit überschritten.

    Beispiel für eine Fehlermeldung:

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

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

    Tatsächliche Anfrage

    So validieren Sie die Anfrage anhand der tatsächlichen Anfrage:

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

    1. Wenn Sie ein Nutzer einer öffentlichen Cloud/Private Cloud sind, stellen Sie eine Anfrage direkt zum Back-End-Server vom Back-End-Server selbst oder einem anderen Maschine, von der aus Sie die Anfrage an das Back-End senden dürfen Server.
    2. Als Private Cloud-Nutzer können Sie die Anfrage auch an vom Back-End-Server von einem der Message Processors.
    3. Untersuchen Sie die vom Back-End-Server empfangene Antwort und insbesondere Gesamtgröße der in der Antwort übergebenen Header zu berechnen und zu überprüfen.
    4. Wenn Sie feststellen, dass die Größe der Header in der Antwortnutzlast überschreitet das zulässige Limit in Apigee Edge, dann ist das die Ursache des Problems.

      Beispielantwort des Zielservers:

      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 sind Testheader1 und Testheader2 haben eine höhere Größe. Das ist der Grund für diesen Fehler, da er die zulässige Grenze in Apigee Edge

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

    Message Processor-Logs

    So validieren Sie mit Message Processor-Logs:

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

    Wenn Sie ein Private Cloud-Nutzer sind, können Sie Message Processor-Logs verwenden, um Validieren, ob die Größe der Antwortheader zulässiges Limit in Apigee Edge.

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

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

    2. Suchen Sie nach 502-Fehlern während eines bestimmten Dauer (wenn das Problem in der Vergangenheit aufgetreten ist) oder ob es Anfragen schlagen immer noch mit 502 fehl. Sie können den folgenden Suchstring verwenden:
      grep -ri "response headers size exceeding"
      
    3. Sie sehen Zeilen von system.log, die der 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 Back-End/Ziel erhält Server und stellt fest, dass die Gesamtgröße der Header größer als 25 KB ist. stoppt er, und es wird folgender Fehler ausgegeben:

      response headers size exceeding 25,600

      Impliziert, dass die Gesamtheadergröße mehr als 25 KB beträgt und Apigee gibt den Fehler aus, wenn die Größe beginnt, das Limit von 25 KB mit Fehlercode zu überschreiten als protocol.http.TooBigHeaders

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie die Zielserveranwendung, damit die Headergröße nicht gesendet wird Überschreitung des Apigee-Limits

<ph type="x-smartling-placeholder">
  1. Analysieren Sie den Grund für den jeweiligen Zielserver, um die Größe des Antwortheaders genauer zu senden als unter Limits festgelegt ist.
  2. Wenn dies nicht erwünscht ist, ändern Sie Ihre Backend-Serveranwendung so, dass sie Antwortheader, die unter dem zulässigen Limit in Apigee Edge.
  3. Prüfen Sie, ob die Header-Informationen als Teil des Antworttexts gesendet werden können.
  4. Senden Sie nach Möglichkeit umfassende Informationen, die Sie im Rahmen des -Header im Antworttext ein. So stellen Sie sicher, dass Sie Header-Limit.
<ph type="x-smartling-placeholder">

CwC

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

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

Apigee bietet eine CwC-Attribut enthält, mit dem die Größenbeschränkung für Antwortheader erhöht werden kann. Details finden Sie unter <ph type="x-smartling-placeholder"></ph> Limits für den Message Processor konfigurieren

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

Limits

Apigee erwartet, dass die Clientanwendung und der Backend-Server keine Headergrößen, die laut Dokumentation über dem zulässigen Grenzwert liegen für Anfrage/Antwort-Headergröße in Apigee Edge-Beschränkungen.

  1. Wenn Sie ein Public Cloud-Nutzer sind, ist die Höchstgrenze für Die Größe der Anfrage- und Antwortheader ist wie für die Größe des Anfrage-/Antwort-Headers in Apigee Edge-Limits.
  2. Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise das Standardhöchstwert Größenbeschränkung für Anfrage- und Antwortheader (auch wenn dies nicht empfohlen wird). Sie können die maximale Größe für Antwortheader ermitteln, indem Sie die Anweisungen unter So prüfen Sie das aktuelle Limit.

Wie kann ich das aktuelle Limit prüfen?

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

In diesem Abschnitt wird erläutert, wie du bestätigst, dass die Property HTTPResponse.headers.limit wurde mit einem neuen Wert in den Message Processors aktualisiert.

  1. Suchen Sie auf dem Message Processor-Computer nach der Eigenschaft HTTPResponse.headers.limit im /opt/apigee/edge-message-processor/conf und wechseln Sie zu sehen Sie, welcher Wert festgelegt wurde:
    grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
    
  2. Das Ergebnis des obigen Befehls sieht wie folgt aus:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. In der Beispielausgabe oben ist das Attribut HTTPResponse.headers.limit wurde mit dem Wert 25k in http.properties festgelegt.

    Dies gibt an, dass das Limit für die Antwortnutzlastgröße in Apigee for Private konfiguriert ist Cloud ist 25 KB groß.

Wenn Sie weitere Unterstützung vom Apigee-Support benötigen, gehen Sie zu 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
  • Vollständiger curl-Befehl zum Reproduzieren des 502-Fehlers
  • Ablaufverfolgungsdatei für 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 für fehlgeschlagene Anfragen
  • Name der Organisation
  • Name der Umgebung
  • API-Proxy-Bundle
  • Ablaufverfolgungsdatei für fehlgeschlagene API-Anfragen
  • Vollständiger curl-Befehl zum Reproduzieren des 502-Fehlers
  • 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

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

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