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.TooBigHeaders
.
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 Header, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet werden, das zulässige Limit in Apigee Edge überschreitet.
Mögliche Ursachen für diesen Fehler:
Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
---|---|---|
Größe der Header in der Antwort überschreitet das zulässige Limit | Die Header-Größe eines bestimmten Headers oder die Summe der Header-Größen aller Header, die vom Ziel-/Back-End-Server als Teil der HTTP-Antwort an Apigee Edge gesendet wurden, überschreitet 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:
- Melden Sie sich in der Apigee Edge-UI als Nutzer mit einer entsprechenden Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
- Sie können den Filter Proxy auswählen, um den Fehlercode einzugrenzen.
- Stellen Sie den Fehlercode der Zeit gegenüber.
Wählen Sie eine Zelle mit dem Fehlercode
protocol.http.TooBigHeaders
aus, wie unten dargestellt:Sie sehen die Informationen zum Fehlercode
protocol.http.TooBigHeaders
wie unten dargestellt: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.TooBigHeaders
.
- Statuscode:
- Wenn die Fehlerquelle den Wert
target
und der Fehlercode den Wertprotocol.http.TooBigHeaders
hat, weist dies darauf hin, dass die HTTP-Antwort des Ziel-/Back-End-Servers Header enthält, deren Größe das zulässige Limit in Apigee Edge überschreitet.
Trace-Tool
- Aktivieren Sie die Trace-Sitzung und entweder:
- Warten Sie, bis der Fehler
502 Bad Gateway
auftritt, oder - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus und reproduzieren Sie den
502 Bad Gateway
-Fehler.
- Warten Sie, bis der Fehler
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
In der Regel tritt dieser Fehler im Ablauf mit dem Namen Error direkt nach der Phase Anfrage an Zielserver gesendet auf, wie unten dargestellt:
Notieren Sie sich die Fehlerwerte aus dem Trace:
- Fehler:
response headers size exceeding 25,600
- 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 Headergröße das zulässige Limit überschreitet.
- Fehler:
Sie sehen den Fehler in der von Apigee Edge gesendeten Fehlerantwort Response Sent to Client (Antwort an Client gesendet), wie unten dargestellt:
- Notieren Sie sich die Fehlerwerte aus dem Trace. Das obige Beispiel-Trace zeigt:
- Fehler:
502 Bad Gateway
. - Fehlerinhalt:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Fehler:
Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf, um die zugehörigen Details zu sehen.
Beachten Sie den Wert des folgenden Elements:
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
So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-
502 Bad Gateway
ermitteln. 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.
- Suchen Sie, ob während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist)
502
-Fehler mit dem Fehlercodeprotocol.http.TooBigHeaders
aufgetreten sind oder ob es immer noch Anfragen mit502
gibt, die fehlschlagen. 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 .Beispiel für einen 502-Fehler aus dem NGINX-Zugriffslog:
Der obige Beispieleintrag aus dem NGINX-Zugriffslog 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
- Bestimmen Sie den Fehlercode, die Fehlerquelle und die Größe der Antwortnutzlast für den Fehler, der mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs beobachtet wird, wie unter Allgemeine Diagnoseschritte erläutert.
- Wenn die Fehlerquelle den Wert
target
hat, weist dies darauf hin, dass die vom Ziel-/Back-End-Server an Apigee gesendete Antwort Header enthält, deren Größe über dem zulässigen Limit in Apigee Edge liegt. - Mit einer der folgenden Methoden können Sie prüfen, ob die Antwort des Ziels/Back-Ends Header enthält, deren Größe das zulässige Limit überschreitet:
Fehlermeldung
So validieren Sie mithilfe der Fehlermeldung:
Wenn Sie Zugriff auf die vollständige Fehlermeldung von Apigee Edge haben, lesen Sie die
faultstring
. Derfaultstring
gibt an, dass die Größe des Antwortheaders das zulässige Limit überschritten hat.Beispiel für eine Fehlermeldung:
"faultstring":"response headers size exceeding 25,600"
Beachten Sie in der obigen Fehlermeldung in
faultstring
, dass die Antwort Header enthält, deren Gesamtgröße das zulässige Limit überschreitet.Tatsächliche Anfrage
So validieren Sie mithilfe der tatsächlichen Anfrage:
Wenn Sie Zugriff auf die eigentliche Anfrage an den Ziel-/Back-End-Server haben, führen Sie die folgenden Schritte aus:
- Wenn Sie ein Nutzer einer öffentlichen Cloud oder einer privaten Cloud sind, stellen Sie vom Back-End-Server selbst oder von einer anderen Maschine, von der Sie die Anfrage an den Back-End-Server senden dürfen, eine Anfrage direkt an den Back-End-Server.
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie die Anfrage von einem der Message Processor auch an den Back-End-Server senden.
- Prüfen Sie die vom Back-End-Server empfangene Antwort. Berechnen und prüfen Sie insbesondere die Gesamtgröße der Header, die in der Antwort übergeben werden.
Wenn Sie feststellen, dass die Größe der Header in der Antwortnutzlast das zulässige Limit in Apigee Edge übersteigt, dann ist dies die Ursache des Problems.
Beispielantwort vom Zielserver:
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 intactIm obigen Beispiel haben
Testheader1
undTestheader2
höhere Größen. Dies ist die Ursache für diesen Fehler, da er das zulässige Limit in Apigee Edge überschreitet.
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 Antwortheader das zulässige Limit in Apigee Edge überschritten hat.
Prüfen Sie die Protokolle des Nachrichtenverarbeiters:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Suchen Sie, ob während eines bestimmten Zeitraums
502
-Fehler aufgetreten sind (ob das Problem in der Vergangenheit aufgetreten ist) oder ob Anfragen mit502
immer noch fehlschlagen. Sie können dazu den folgenden Suchstring verwenden:grep -ri "response headers size exceeding"
- Die Linien von
system.log
sehen in etwa so aus. 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)
-
Sobald der Message Processor die Antwort vom Back-End/Zielserver erhält und feststellt, dass die Gesamtgröße der Header mehr als 25 KB beträgt, stoppt er und gibt den folgenden Fehler aus:
response headers size exceeding 25,600
Dies impliziert, dass die Gesamt-Header-Größe mehr als 25 KB beträgt und Apigee den Fehler ausgibt, wenn die Größe beginnt, den Grenzwert von 25 KB mit dem Fehlercode
protocol.http.TooBigHeaders
zu überschreiten.
Auflösung
Größe korrigieren
Option 1 [empfohlen]: Beheben Sie das Problem, dass die Zielserveranwendung keine Header sendet, die das Apigee-Limit überschreiten.
- Analysieren Sie den Grund für das Senden des Antwortheaders auf dem jeweiligen Zielserver, der das unter Limits definierte Limit überschreitet.
- Wenn dies nicht gewünscht ist, ändern Sie Ihre Back-End-Serveranwendung so, dass sie Antwortheader sendet, deren Größe unter dem zulässigen Limit in Apigee Edge liegt.
- Prüfen Sie, ob die Header-Informationen als Teil des Antworttexts gesendet werden können.
- Senden Sie nach Möglichkeit umfangreiche Informationen, die Sie als Teil des Headers im Antworttext senden wollten. Dadurch wird das Limit für Antwortheader nicht überschritten.
CwC
Option 2 : CwC-Attribut verwenden, um die Größenbeschränkung für den Antwortheader zu erhöhen
Apigee bietet eine CwC-Eigenschaft, mit der die Größenbeschränkung für Antwortheader erhöht werden kann. Einzelheiten finden Sie unter Limits für den Message Processor konfigurieren.
Einschränkungen
Apigee erwartet, dass die Clientanwendung und der Back-End-Server keine Header senden, die größer als das zulässige Limit sind, das unter Limits für Apigee Edge unter „Header-Größe für Anfrage/Antwort“ dokumentiert ist.
- Wenn Sie ein Nutzer der öffentlichen Cloud sind, ist die maximale Größe für die Größe von Anfrage- und Antwortheadern wie unter Größe des Anfrage-/Antwortheaders unter Limits für Apigee Edge beschrieben.
- Wenn Sie ein Private Cloud-Nutzer sind, haben Sie möglicherweise die maximale Standardgröße für die Größe von Anfrage- und Antwortheadern geändert (auch wenn dies nicht empfohlen wird). Sie können die maximale Größe des Antwortheaders anhand der Anleitung unter Aktuelle Begrenzung 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.headers.limit
mit einem neuen Wert auf den Message Processors aktualisiert wurde.
- Suchen Sie auf dem Message Processor-Computer im Verzeichnis
/opt/apigee/edge-message-processor/conf
nach dem AttributHTTPResponse.headers.limit
und prüfen Sie, welcher Wert wie unten dargestellt festgelegt wurde:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Das Ergebnis des obigen Befehls sieht so aus:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
In der obigen Beispielausgabe wurde das Attribut
HTTPResponse.headers.limit
auf den Wert25k
inhttp.properties
festgelegt.Dies weist darauf hin, dass das Limit für die in Apigee für Private Cloud konfigurierte Größe der Antwortnutzlast 25 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
- Führen Sie den Befehl
curl
aus, mit dem der Fehler502
reproduziert wurde - Ablaufverfolgungsdatei für die 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 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 Fehler502
reproduziert wurde - 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
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