502 Bad Gateway – TooBigLine

<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 ab protocol.http.TooBigLine als Antwort auf API-Aufrufe an.

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 der Antwortzeile, die vom Ziel-/Back-End-Server zu Apigee Edge als Teil der HTTP-Antwort ist größer als das zulässige Maximum Limit in Apigee Edge.

Bevor wir uns die möglichen Ursachen für diesen Fehler ansehen, schauen wir uns zunächst an, was die Antwortzeile und wie die Größe überprüft wird.

Informationen zur Antwortzeile

Eine typische HTTP-Antwort besteht aus drei Teilen:

  1. <ph type="x-smartling-placeholder"></ph> Statuszeile (in Apigee als Antwortzeile bezeichnet)
  2. ( Satz von HTTP-Headern )
  3. [ Text ]

Die Antwortzeile besteht aus drei Teilen: der Protokollversion gefolgt von einer numerischen Statuscode und die zugehörige Wortgruppe in Textform an, wie unten dargestellt:

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

Wenn die Ziel-/Back-End-Serveranwendung eine HTTP-Antwort sendet, wird die erste Zeile, „Gesendet“ steht für die oben beschriebene Antwortzeile. Darauf folgt der Aufruf, Header und dem Antworttext bzw. der Nutzlast. Der folgende Beispiel-Screenshot zeigt eine typische curl-Anfrage, die Teile Request und Response (zusammen mit den Antwortzeile).

Informationen zur Größe der Antwortzeile

  1. Im oben erläuterten Beispiel wird auch die start-Zeile (erste Zeile) in der Antwort Response-Line (Antwortzeile) lautet:

    HTTP/1.1 200 OK
    

    Diese Antwortzeile hat die Größe ~15 bytes, da sie 15 ASCII characters enthält. Da dies innerhalb der in Apigee Edge zulässig ist, wird die Antwort ohne jegliche Fehler durch Apigee Edge.

  2. Ähnliches gilt für faultstring im Feld Die oben angezeigte Fehlermeldung enthält "response line size exceeding 2,048". Dies gibt an, dass die Response-Line (Antwortzeile) in der HTTP-Antwort vom Ziel-/Back-End-Server gesendet hat 2.048 Byte überschritten.

Grundlegendes zu einer großen Antwortzeile

Gemäß der Definition von <ph type="x-smartling-placeholder"></ph> Statuszeile (hier als Antwortzeile bezeichnet) und typischer HTTP-Anfragen und ist die Größe viel kleiner als das definierte Standardlimit von 2 K in Apigee Edge. sodass wir möglicherweise das Limit erreicht haben. Es gibt jedoch einige mögliche Szenarien, in denen Sie diese Beschränkung überschreiten können:

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

Weitere Informationen dazu finden Sie in <ph type="x-smartling-placeholder"></ph> Fehlerprotokoll.http.TooBigLine, „response line size of over 2,048“ erhalten.

Mögliche Ursachen für diesen Fehler:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Größe der Antwortzeile überschreitet das zulässige Limit Die Größe der Antwortzeile, die vom Ziel-/Back-End-Server im Rahmen des Die HTTP-Antwort an Apigee Edge ist größer als die zulässiges 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.TooBigLine als (siehe unten):

    ( Größeres Bild ansehen)

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

    ( Größeres Bild ansehen)

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

  10. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Statuscode: 502
    • Fehlerquelle: target
    • Fehlercode: protocol.http.TooBigLine.
  11. Wenn die Fehlerquelle den Wert target und den Fehler Code den Wert protocol.http.TooBigLine hat, bedeutet das, dass Die HTTP-Antwort vom Ziel-/Back-End-Server weist eine Antwortzeile auf, die größer ist als das maximal 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 sind Fehler in der flowinfo-Fehler nach der Phase Anfrage an Zielserver gesendet an:

    Notieren Sie sich die Fehlerwerte aus dem Trace:

    • Fehler: response line exceeding 2,048
    • error.class: com.apigee.errors.http.server.BadGateway

    Dies gibt an, dass Apigee Edge (Message Processor-Komponente) den Fehler als sobald aufgrund einer Antwortzeilengröße die Antwort vom Backend-Server eingeht Überschreitung des zulässigen Grenzwerts.

  5. Die an den Client gesendete Fehlermeldung finden Sie in der Antwort auf der Seite Antwort gesendet an Client-Phase wie unten gezeigt:

    ( Größeres Bild ansehen)

  6. Notieren Sie sich die Fehlerwerte aus dem Trace: <ph type="x-smartling-placeholder">
      </ph>
    • Fehler: 502 Bad Gateway.
    • Fehlerinhalt: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. Sie können im Trace auch zur Phase AX (Analytics Data Recorded) wechseln. und klicken Sie darauf, um die Fehlerdetails aufzurufen.

    ( Größeres Bild ansehen)

    Beachten Sie den folgenden Wert:

    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

<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-Fehlern 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. Suchen, um zu sehen, ob es während eines bestimmten Zeitraums 502 Fehler gibt (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.TooBigLine entspricht, dann ermitteln Sie, Wert von X-Apigee-fault-source..

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

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

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

Diagnose

  1. Ermitteln Sie den Fehlercode und die Fehlerquelle für den mit der API beobachteten Fehler. Monitoring-, Trace-Tool- oder NGINX-Zugriffslogs wie unter Häufige Diagnoseschritte.
  2. Wenn die Fehlerquelle den Wert target hat, bedeutet dies, dass der Die Größe der Antwortzeile, die von der Ziel-/Back-End-Serveranwendung an Apigee gesendet wird, ist größer als die zulässiges Limit in Apigee Edge.
  3. Sie können überprüfen, ob die Größe der Antwortzeile das zulässige Limit von 2 KB überschritten hat, indem Sie eine der folgenden Methoden verwenden:

    Fehlermeldung

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

    Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, finden Sie weitere Informationen in der faultstring

    Beispiel für eine Fehlermeldung:

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

    Das faultstring oben gibt an, dass die Größe der Antwortzeile den zulässigen maximal 2 KB groß.

    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 Anwendung und führen Sie dann die folgenden Schritte aus:

    1. Überprüfen Sie die Größe der Antwortzeile
    2. Wenn Sie feststellen, dass die Größe des URI größer ist als die zulässigen Grenzwert in Apigee Edge, dann ist das die Ursache das Problem zu lösen.

      Beispielantwort des Ziel-/Back-End-Servers:

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

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

    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 überprüfen, ob die Größe der Antwortzeile die zulässiges Limit in Apigee Edge.

    1. Bestimmen Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mithilfe des API-Monitorings, des Trace-Tools oder NGINX-Zugriffsprotokolle, 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. Zeilen 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 oben gibt an, dass die Größe der Antwortzeile mehr als 2 KB beträgt. Dementsprechend wird Apigee Edge löst die Ausnahme aus und gibt einen 502-Statuscode mit Fehlercode protocol.http.TooBigline zu Client-Anwendungen.

Auflösung

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

Größe korrigieren

Option 1 [empfohlen]: Korrigieren Sie die Ziel-/Back-End-Serveranwendung, die nicht Antwortzeilen, die größer als das zulässige Limit sind

<ph type="x-smartling-placeholder">
  1. Analysieren Sie den Grund für den Kunden, eine Antwortzeile mit einer größeren Größe zu senden. als unter Limits festgelegt ist.
  2. Ändern Sie gegebenenfalls Ihre Ziel-/Back-End-Serveranwendung so, sendet eine Antwortzeile, deren Größe kleiner als das zulässige Limit ist.
  3. Wenn dies wünschenswert ist und Sie eine Antwortzeile mit einer Größe mehr als die Zulässiges Limit haben, fahren Sie mit den nächsten Optionen fort.

CwC

Option 2: CwC-Attribut zum Erhöhen des Antwortzeilenlimits verwenden

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

Apigee bietet eine CwC. , mit der die Größenbeschränkung der Antwortzeile erhöht werden kann. Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Legen Sie das Antwortzeilenlimit für den Nachrichtenverarbeiter fest.

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

Limits

Apigee erwartet, dass die Clientanwendung und der Backend-Server keine Anfrage-/Antwortzeilen senden deren Größen größer als die für Anfrage-/Antwortzeilenlimit dokumentierte zulässige Beschränkung sind finden Sie unter Apigee Edge Limits.

  1. Wenn Sie ein Public Cloud-Nutzer sind, ist die Höchstgrenze für Anfragen und Die Größe der Antwortzeilen ist entsprechend der Dokumentation für die Größe der Anfrage-/Antwortzeile in Apigee Edge-Limits.
  2. Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise das Standardhöchstwert Limit für die Größe der Anfrage- und Antwortzeile (auch wenn dies nicht empfohlen wird). Sie können die maximale Größe für Antwortzeilen bestimmen, indem Sie die Anweisungen in 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.line.limit wurde mit einem neuen Wert in den Message Processors aktualisiert.

  1. Suchen Sie auf dem Message Processor-Computer nach der Eigenschaft HTTPResponse.line.limit im /opt/apigee/edge-message-processor/conf und wechseln Sie zu sehen Sie, welcher Wert festgelegt wurde:
    grep -ri "HTTPResponse.line.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.line.limit=2k
    
  3. Beachten Sie in der obigen Beispielausgabe, dass das Attribut HTTPResponse.line.limit wurde mit dem Wert 2k in http.properties festgelegt.

    Dies gibt an, dass das Limit für die Größe der Antwortzeile in Apigee for Private konfiguriert ist Cloud ist 2 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 Fehlers 502
  • Ablaufverfolgungsdatei für API-Anfragen

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