502 Bad Gateway – TooBigLine

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

Symptom

Die Clientanwendung erhält den HTTP-Statuscode 502 Bad Gateway mit dem Fehlercode protocol.http.TooBigLine 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 line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Mögliche Ursachen

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

Bevor wir uns die möglichen Ursachen für diesen Fehler ansehen, wollen wir verstehen, was die Antwortzeile bedeutet und wie Sie ihre Größe prüfen.

Antwortzeile

Eine typische HTTP-Antwort besteht aus drei Teilen:

  1. Statuszeile (in Apigee als Antwortzeile bezeichnet)
  2. ( Satz von HTTP-Headern )
  3. [ Body ]

Die Antwortzeile besteht aus drei Teilen: Protokollversion , gefolgt von einem numerischen Statuscode und der zugehörigen Textphrase , wie unten dargestellt:

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

Wenn eine HTTP-Antwort von der Ziel-/Backend-Serveranwendung gesendet wird, stellt die erste gesendete Zeile die Antwortzeile dar, wie oben beschrieben. Danach folgen die Header und der Antworttext/die Antwortnutzlast.Der folgende Screenshot zeigt eine typische curl Anfrage, den Teil Anfrage und den Teil Antwort (zusammen mit der Antwortzeile).

Größe der Antwortzeile

  1. Im oben beschriebenen Beispiel ist die Startzeile (erste Zeile) in der Antwort, auch als Antwortzeile bezeichnet, wie folgt:

    HTTP/1.1 200 OK

    Diese Antwortzeile hat eine Größe von ~15 bytes, da sie 15 ASCII characters enthält. Da dies innerhalb des zulässigen Limits in Apigee Edge liegt, wird die Antwort ohne Fehler von Apigee Edge an den Client zurückgesendet.

  2. Wenn Sie sich den faultstring in der Fehlermeldung ansehen, enthält er "response line size exceeding 2,048". Das bedeutet,dass die Antwortzeile in der HTTP-Antwort gesendet vom Ziel-/Backend-Server 2.048 Byte überschritten hat.

Große Antwortzeile

Gemäß der Definition der Statuszeile (hier als Antwortzeile bezeichnet) und typischen HTTP-Anfragen und Antworten ist die Größe viel kleiner als das definierte Standardlimit von 2 KB in Apigee Edge, sodass wir das Limit möglicherweise nicht erreichen. Hier sind jedoch einige mögliche Szenarien, in denen Sie dieses Limit überschreiten können:

  1. Der Ziel-/Backend-Server ist kein HTTP-System. Er antwortet möglicherweise mit einer Nicht-HTTP Antwort.
  2. Der Ziel-/Backend-Server hat Probleme und sendet eine lange Antwortzeile als Teil der HTTP Antwort.

Weitere Informationen finden Sie unter Fehler „protocol.http.TooBigLine, response line size exceeding 2,048“.

Hier sind die möglichen Ursachen für den Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Die Größe der Antwortzeile überschreitet das zulässige Limit Die Größe der Antwortzeile, die vom Ziel-/Backend-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wird, ü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 API-Monitoring:

  1. Melden Sie sich in der Apigee Edge-Benutzeroberfläche 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.TooBigLine aus, wie dargestellt:

    ( größeres Bild ansehen)

  8. Die Informationen zum Fehlercode protocol.http.TooBigLine 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.

  10. Notieren Sie sich im Fenster Logs die folgenden Details:
    • Statuscode:502
    • Fehlerquelle:target
    • Fehlercode:protocol.http.TooBigLine.
  11. Wenn die Fehlerquelle den Wert target und der Fehlercode den Wert protocol.http.TooBigLine hat, bedeutet das, dass die HTTP-Antwort vom Ziel-/Backend-Server eine Antwortzeile hat, die das maximal 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. oder
    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. Navigieren Sie durch die verschiedenen Phasen des Trace und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
  4. Normalerweise finden Sie den Fehler in der flowinfo Error direkt nach der Phase Request sent to target server (Anfrage an Zielserver gesendet), wie unten dargestellt:

    Notieren Sie sich die Werte des Fehlers aus dem Trace:

    • error:response line exceeding 2,048
    • 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 Größe der Antwortzeile das zulässige Limit überschreitet.

  5. Die an den Client gesendete Fehlermeldung wird in der Phase Response Sent to Client angezeigt, wie unten dargestellt:

    ( größeres Bild ansehen)

  6. Notieren Sie sich die Werte des Fehlers aus dem Trace:
    • Error:502 Bad Gateway.
    • Error Content: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. Sie können auch zur Phase AX (Analysedaten aufgezeichnet) im Trace und darauf klicken, um die Fehlerdetails zu sehen.

    ( größeres Bild ansehen)

    Notieren Sie sich den Wert des Folgenden:

    Anfrageheader Wert
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    Fehlerinhalt : Body {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

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 Fehlern 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 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.TooBigLine übereinstimmt, ermitteln Sie den Wert der X-Apigee-fault-source.

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

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

Ursache: Die Größe der Antwortzeile überschreitet das zulässige Limit

Diagnose

  1. Ermitteln Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mit API Monitoring, dem Trace-Tool oder NGINX-Zugriffsprotokollen, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn die Fehlerquelle den Wert target hat, bedeutet das, dass die Größe der Antwortzeile, die von der Ziel-/Backend-Serveranwendung an Apigee gesendet wird, das zulässige Limit in Apigee Edge überschreitet.
  3. Sie können mit einer der folgenden Methoden prüfen, ob die Größe der Antwortzeile das zulässige Limit von 2 KB überschritten hat:

    Fehlermeldung

    So prüfen Sie die Größe der Antwortzeile mit der Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung haben, die Sie von Apigee Edge erhalten haben, sehen Sie sich den faultstring an.

    Beispiel für eine Fehlermeldung :

    "faultstring":"response line size exceeding 2,048"

    Der obige faultstring zeigt, dass die Größe der Antwortzeile das zulässige Limit von 2 KB überschritten hat.

    Tatsächliche Anfrage

    So prüfen Sie die Größe der Antwortzeile mit der tatsächlichen Anfrage:

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

    1. Prüfen Sie die Größe der Antwortzeile.
    2. Wenn die Größe des URI das zulässige Limit in Apigee Edge überschreitet, ist dies die Ursache des Problems.

      Beispielantwort vom Ziel-/Backend-Server :

      curl -v http://HOSTALIAS/test
      
      *   Trying 3.2.1.4...
      * TCP_NODELAY set
      * Connected to <hostalias> (3.2.1.4) port 80 (#0)
      > GET /test HTTP/1.1
      > Host: HOSTALIAS
      > User-Agent: curl/7.64.1
      > Accept: */*
      >
      < HTTP/1.1 200 1111…<trimmed>...11111111
      < Date: Mon, 26 Jul 2021 07:07:18 GMT
      < Content-Type: application/json
      < Content-Length: 269
      < Connection: keep-alive
      < Server: gunicorn/19.9.0
      < Access-Control-Allow-Origin: *
      < Access-Control-Allow-Credentials: true
      <
      {
      <Response Body>
      }
      * Connection #0 to host <hostalias> left intact
      * Closing connection 0

      Im obigen Fall ist die Antwortzeile HTTP/1.1 200 1111…<trimmed>...11111111 größer als 2 KB, d. h., sie enthält mehr als 2.000 ASCII-Zeichen.

      Wenn Sie einen anderen Client verwenden, können Sie die Clientprotokolle prüfen und versuchen, die Größe der Antwortzeile zu ermitteln, die an Apigee Edge gesendet wird.

    Message Processor-Protokolle

    So prüfen Sie die Größe der Antwortzeile mit Message Processor-Protokollen:

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

    1. Ermitteln Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mit API-Monitoring, dem Trace-Tool, oder NGINX-Zugriffsprotokollen, wie unter Allgemeine Diagnoseschritte erläutert.
    2. Suchen Sie im Message Processor-Protokoll nach der Nachrichten-ID:

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

    3. Sie finden Zeilen aus system.log, die so aussehen:

      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1
      NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() :
      ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592
      useCount=1 bytesRead=0 bytesWritten=201 age=144ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048
      at <snipped>
      
      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1
      messageid:r-5110240-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@6a5d6c33, response line size exceeding 2,048)

      Der Text message = response line size exceeding 2,048 in der obigen Fehlermeldung zeigt, dass die Größe der Antwortzeile mehr als 2 KB beträgt. Daher, Apigee Edge löst die Ausnahme aus und gibt den Statuscode 502 mit Fehlercode protocol.http.TooBigline an Clientanwendungen zurück.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie die Ziel-/Backend-Serveranwendung so, dass keine Antwortzeilen gesendet werden, deren Größe das zulässige Limit überschreitet.

  1. Analysieren Sie, warum der bestimmte Client eine Antwortzeile sendet, deren Größe das zulässige Limit überschreitet, wie unter Limits definiert.
  2. Wenn dies nicht gewünscht ist, ändern Sie Ihre Ziel-/Backend-Serveranwendung so, dass sie eine Antwortzeile sendet, deren Größe unter dem zulässigen Limit liegt.
  3. Wenn dies gewünscht ist und Sie eine Antwortzeile senden möchten, deren Größe das zulässige Limit überschreitet, fahren Sie mit den nächsten Optionen fort.

CwC

Option 2: Verwenden Sie die CwC-Property, um das Limit für die Antwortzeile zu erhöhen.

Apigee bietet eine CwC Property, mit der das Limit für die Größe der Antwortzeile erhöht werden kann. Weitere Informationen finden Sie unter Limit für die Antwortzeile im Message Processor festlegen.

Limits

Apigee erwartet, dass die Clientanwendung und der Backend-Server keine Anfrage-/Antwortzeilen senden, deren Größe das zulässige Limit überschreitet, wie unter Limit für Anfrage-/Antwortzeile in Apigee Edge-Limits dokumentiert.

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

Aktuelles Limit prüfen

In diesem Abschnitt wird erläutert, wie Sie prüfen, ob die Property HTTPResponse.line.limit in den Nachrichtenverarbeitern mit einem neuen Wert aktualisiert wurde.

  1. Suchen Sie auf dem Message Processor im Verzeichnis /opt/apigee/edge-message-processor/conf nach der Property HTTPResponse.line.limit und prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:
    grep -ri "HTTPResponse.line.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.line.limit=2k
  3. Beachten Sie in der obigen Beispielausgabe, dass die Property HTTPResponse.line.limit in http.properties auf den Wert 2k festgelegt wurde.

    Das bedeutet, dass das in Apigee for Private Cloud konfigurierte Limit für die Größe der Antwortzeile 2 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 zum Reproduzieren des Fehlers 502
  • Trace-Datei für die API-Anfragen

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 zum Reproduzieren des Fehlers 502
  • 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