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:
- Statuszeile (in Apigee als Antwortzeile bezeichnet)
- ( Satz von HTTP-Headern )
- [ 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
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 sie15 ASCII charactersenthä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.- Wenn Sie sich den
faultstringin 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:
- Der Ziel-/Backend-Server ist kein HTTP-System. Er antwortet möglicherweise mit einer Nicht-HTTP Antwort.
- 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:
- Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einer geeigneten Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
- Sie können den Filter Proxy auswählen, um den Fehlercode einzugrenzen.
- Stellen Sie Fehlercode im Verhältnis zu Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.TooBigLineaus, wie dargestellt:
Die Informationen zum Fehlercode
protocol.http.TooBigLinewerden wie unten dargestellt angezeigt:
Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
- Notieren Sie sich im Fenster Logs die folgenden Details:
- Statuscode:
502 - Fehlerquelle:
target - Fehlercode:
protocol.http.TooBigLine.
- Statuscode:
- Wenn die Fehlerquelle den Wert
targetund der Fehlercode den Wertprotocol.http.TooBigLinehat, 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
- Aktivieren Sie die Trace-Sitzung
und führen Sie einen der folgenden Schritte aus:
- Warten Sie, bis der Fehler
502 Bad Gatewayauftritt. oder - Wenn Sie das Problem reproduzieren können, stellen Sie den API-Aufruf und reproduzieren Sie den
502 Bad GatewayFehler.
- Warten Sie, bis der Fehler
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und untersuchen Sie den Trace.
- Navigieren Sie durch die verschiedenen Phasen des Trace und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Normalerweise finden Sie den Fehler in der
flowinfoError 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.
- error:
Die an den Client gesendete Fehlermeldung wird in der Phase Response Sent to Client angezeigt, wie unten dargestellt:
- 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"}}}
- Error:
Sie können auch zur Phase AX (Analysedaten aufgezeichnet) im Trace und darauf klicken, um die Fehlerdetails zu sehen.
Notieren Sie sich den Wert des Folgenden:
Anfrageheader Wert X-Apigee-fault-code protocol.http.TooBigLineX-Apigee-fault-source targetFehlerinhalt : Body {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
NGINX
So diagnostizieren Sie den Fehler mit NGINX-Zugriffsprotokollen:
- Wenn Sie Nutzer der Private Cloud sind, können Sie NGINX-Zugriffsprotokolle verwenden, um
die wichtigsten Informationen zu HTTP
502Fehlern zu ermitteln. Prüfen Sie die NGINX-Zugriffsprotokolle:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV, und PORT# durch tatsächliche Werte ersetzt.
- Suchen Sie nach
502-Fehlern in einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, die immer noch mit502fehlschlagen. Wenn Sie
502Fehler finden, bei denen der X-Apigee-fault-code mit dem Wertprotocol.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.TooBigLineX-Apigee-fault-source target
Ursache: Die Größe der Antwortzeile überschreitet das zulässige Limit
Diagnose
- 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.
- Wenn die Fehlerquelle den Wert
targethat, 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. 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
faultstringan.Beispiel für eine Fehlermeldung :
"faultstring":"response line size exceeding 2,048"
Der obige
faultstringzeigt, 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:
- Prüfen Sie die Größe der Antwortzeile.
- 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>...11111111größ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.
- Ermitteln Sie die Nachrichten-ID der fehlgeschlagenen Anfrage mit API-Monitoring, dem Trace-Tool, oder NGINX-Zugriffsprotokollen, wie unter Allgemeine Diagnoseschritte erläutert.
Suchen Sie im Message Processor-Protokoll nach der Nachrichten-ID:
/opt/apigee/var/log/edge-message-processor/logs/system.logSie 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,048in 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 Statuscode502mit Fehlercodeprotocol.http.TooBiglinean 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.
- Analysieren Sie, warum der bestimmte Client eine Antwortzeile sendet, deren Größe das zulässige Limit überschreitet, wie unter Limits definiert.
- 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.
- 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.
- 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.
- 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.
- Suchen Sie auf dem Message Processor im Verzeichnis
/opt/apigee/edge-message-processor/confnach der PropertyHTTPResponse.line.limitund prüfen Sie, welcher Wert festgelegt wurde, wie unten dargestellt:grep -ri "HTTPResponse.line.limit" /opt/apigee/edge-message-processor/conf
- Das Beispielergebnis des obigen Befehls sieht so aus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.line.limit=2k
Beachten Sie in der obigen Beispielausgabe, dass die Property
HTTPResponse.line.limitinhttp.propertiesauf den Wert2kfestgelegt 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 Fehlers502 NGINX-Zugriffsprotokolle
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDabei werden: ORG, ENV und PORT# durch tatsächliche Werte ersetzt.
- Message Processor-Systemprotokolle
/opt/apigee/var/log/edge-message-processor/logs/system.log