502 Bad Gateway – TooBigLine

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.TooBigLine .

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 line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Mögliche Ursachen

Dieser Fehler tritt auf, wenn die Größe Response-Line, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wird, größer als das maximal zulässige Limit in Apigee Edge ist.

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

Erläuterung der Antwortzeile

Eine typische HTTP-Antwort besteht aus drei Teilen:

  1. Status-Line (in Apigee als Response-Line bezeichnet)
  2. ( Gruppe von HTTP-Headern )
  3. [Text ]

Die Response-Line besteht aus drei Teilen: Protokollversion, gefolgt von einem numerischen Statuscode und dem zugehörigen entsprechenden Text, wie unten dargestellt:

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

Wenn von der Ziel-/Back-End-Serveranwendung eine HTTP-Antwort gesendet wird, stellt die erste gesendete Zeile die oben beschriebene Antwortzeile dar. Darauf folgen die Header und der Antworttext/die Nutzlast.Der folgende Beispielscreenshot zeigt eine typische curl-Anfrage, den Teil Anfrage und den Teil Antwort (zusammen mit der Antwortzeile).

Informationen zur Größe der Antwortzeile

  1. Im oben beschriebenen Beispiel sieht die start-Zeile (erste Zeile) in der Antwort, die auch als Response-Line bezeichnet wird, so aus:

    HTTP/1.1 200 OK
    

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

  2. Wenn Sie sich faultstring in der Fehlermeldung oben ansehen, enthält sie "response line size exceeding 2,048". Dies weist darauf hin,dass die Response-Line in der vom Ziel-/Back-End-Server gesendeten HTTP-Antwort 2.048 Byte überschreitet.

Große Antwortzeile verstehen

Gemäß der Definition von Status-Line (hier als Response-Line bezeichnet) und typischen HTTP-Anfragen und -Antworten wäre die Größe viel kleiner als die in Apigee Edge definierte Standardbeschränkung von 2 K, sodass das Limit möglicherweise nicht erreicht wird. In den folgenden Fällen kann diese Beschränkung jedoch überschritten werden:

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

Weitere Informationen finden Sie unter Fehlerprotokoll.http.TooBigLine, "Antwortzeilegröße über 2.048".

Das kann folgende Ursachen haben:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Größe der Antwortzeile ist größer als zulässiges Limit Die Größe der Response-Line, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wird, ist größer als 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.TooBigLine aus, wie unten dargestellt:

    ( größeres Bild ansehen)

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

    ( 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, weist dies darauf hin, dass die Größe der Antwortzeile vom Ziel-/Back-End-Server größer als das maximal zulässige Limit in Apigee Edge ist.

Trace-Tool

  1. Aktivieren Sie die Trace-Sitzung und entweder:
    1. Warten Sie, bis der Fehler 502 Bad Gateway auftritt.
    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 der Fehler im Fehler flowinfo direkt nach der Phase Anfrage an Zielserver gesendet auf, wie unten dargestellt:

    Notieren Sie sich die Fehlerwerte aus dem Trace:

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

  5. Sie sehen die an den Client gesendete Fehlermeldung in der Phase Response Sent to Client (Antwort an den Client gesendet), wie unten dargestellt:

    ( größeres Bild ansehen)

  6. Notieren Sie sich die Fehlerwerte aus dem Trace:
    • Fehler: 502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. Sie können auch zur Phase AX (Aufgezeichnete Analytics-Daten) im Trace gehen und darauf klicken, um die Fehlerdetails aufzurufen.

    ( größeres Bild ansehen)

    Beachten Sie den Wert des folgenden Elements:

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

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-Fehlern 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 nach 502-Fehlern innerhalb eines bestimmten Zeitraums (ob das Problem in der Vergangenheit aufgetreten ist) 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 .

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

    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. Bestimmen Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn die Fehlerquelle den Wert target hat, gibt dies an, dass die von der Ziel-/Back-End-Serveranwendung an Apigee gesendete Größe der Antwortzeile größer als die zulässige Grenze in Apigee Edge ist.
  3. Mit einer der folgenden Methoden können Sie prüfen, ob die Größe der Antwortzeile die maximal zulässige Größe von 2 KB überschreitet:

    Fehlermeldung

    So validieren Sie mithilfe der Fehlermeldung:

    Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die faultstring.

    Beispiel für eine Fehlermeldung:

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

    Die obige faultstring gibt an, dass die Größe der Antwortzeile die zulässige Größe von 2 KB überschritten hat.

    Tatsächliche Anfrage

    So validieren Sie mithilfe der tatsächlichen Anfrage:

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

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

      Beispielantwort vom Ziel-/Back-End-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 HTTP/1.1 200 1111…<trimmed>...11111111 der Antwortzeile größer als 2 KB, d. h., sie enthält mehr als 2 K ASCII-Zeichen.

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

    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 Antwortzeile das zulässige Limit in Apigee Edge überschritten hat.

    1. Bestimmen Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, 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. Die Linien von system.log sehen in etwa so aus:

      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 gibt an, dass die Antwortzeile größer als 2 KB ist. Daher gibt Apigee Edge die Ausnahme aus und gibt den Statuscode 502 mit dem Fehlercode protocol.http.TooBigline an Clientanwendungen zurück.

Auflösung

Größe korrigieren

Option 1 [empfohlen]: Beheben Sie das Problem, dass die Ziel-/Back-End-Serveranwendung keine Antwortzeilen sendet, deren Größe das zulässige Limit überschreitet.

  1. Analysieren Sie den Grund für den jeweiligen Client, eine Antwortzeile zu senden, deren Größe das unter Beschränkungen festgelegte Limit überschreitet.
  2. Wenn dies nicht gewünscht ist, ändern Sie die Ziel-/Back-End-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: CwC-Attribut verwenden, um das Limit für Antwortzeilen zu erhöhen

Apigee bietet eine CwC-Eigenschaft, mit der Sie das Größenlimit für die Antwortzeile erhöhen können. Weitere Informationen finden Sie unter Limit für Antwortzeile im Message Processor festlegen.

Einschränkungen

Apigee erwartet, dass die Clientanwendung und der Back-End-Server keine Anfrage-/Antwortzeilen senden, deren Größe das zulässige Limit überschreitet, das unter Zeilenlimit für Anfrage/Antwort in Grenzwerte für Apigee Edge dokumentiert ist.

  1. Wenn Sie ein Nutzer einer öffentlichen Cloud sind, ist die maximale Größe für die Größe von Anfrage- und Antwortzeilen unter Größe der Anfrage-/Antwortzeile unter Limits für Apigee Edge dokumentiert.
  2. Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise die standardmäßige Höchstgrenze für die Größe von Anfragen und Antwortzeilen geändert (obwohl dies nicht empfohlen wird). Sie können die maximale Größe für Antwortzeilen anhand der Anleitung unter Aktuelles Limit 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.line.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.line.limit und prüfen Sie, welcher Wert wie unten dargestellt festgelegt wurde:
    grep -ri "HTTPResponse.line.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.line.limit=2k
    
  3. In der obigen Beispielausgabe wurde das Attribut HTTPResponse.line.limit auf den Wert 2k in http.properties gesetzt.

    Dies weist darauf hin, dass das Limit für die in Apigee für Private Cloud konfigurierte Größe der Antwortzeile 2 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
  • Schließen Sie den curl-Befehl ab, mit dem der Fehler 502 reproduziert wird
  • Ablaufverfolgungsdatei für die API-Anfragen

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
  • 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