Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway z
kodem błędu protocol.http.TooBigHeaders w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Może też pojawić się ten komunikat o błędzie:
{
"fault":{
"faultstring":"response headers size exceeding 25,600",
"detail":{
"errorcode":"protocol.http.TooBigHeaders"
}
}
}Możliwe przyczyny
Ten błąd występuje, gdy łączny rozmiar nagłówków wysyłanych przez serwer docelowy lub serwer backendu do Apigee Edge w ramach odpowiedzi HTTP jest większy niż dozwolony dozwolony limit w Apigee Edge.
Oto możliwe przyczyny tego błędu:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów |
|---|---|---|
| Rozmiar nagłówków w odpowiedzi jest większy niż dozwolony limit | Rozmiar nagłówka lub suma rozmiarów wszystkich nagłówków wysyłanych przez serwer docelowy lub serwer backendu w ramach odpowiedzi HTTP do Apigee Edge jest większa niż dozwolony limit w Apigee Edge. | Użytkownicy chmury publicznej i prywatnej Edge |
Typowe czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przejdź do organizacji, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
- Aby zawęzić kod błędu, możesz wybrać filtr Proxy.
- Wykreśl kod błędu względem czasu.
Wybierz komórkę z kodem błędu
protocol.http.TooBigHeadersjak pokazano poniżej:
Zobaczysz informacje o kodzie błędu
protocol.http.TooBigHeadersjak pokazano poniżej:
Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zanotuj te informacje:
- Kod stanu:
502 - Źródło błędu:
target - Kod błędu:
protocol.http.TooBigHeaders.
- Kod stanu:
- Jeśli Źródło błędu ma wartość
target, a Kod błędu ma wartośćprotocol.http.TooBigHeaders, oznacza to, że odpowiedź HTTP z serwera docelowego lub serwera backendu zawiera nagłówki, których rozmiar jest większy niż dozwolony limit w Apigee Edge.
Narzędzie Trace
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu
502 Bad Gatewaylub - Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz błąd
502 Bad Gateway.
- Poczekaj na wystąpienie błędu
- Wybierz jedno z nieudanych żądań i sprawdź ślad.
- Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
Zwykle ten błąd występuje w przepływie o nazwie Błąd tuż po etapie Żądanie wysłane do serwera docelowego jak pokazano poniżej:
Zanotuj wartości błędu ze śladu:
- error:
response headers size exceeding 25,600 - error.class:
com.apigee.errors.http.server.BadGateway
Oznacza to, że Apigee Edge (komponent procesora komunikatów) zgłasza błąd, gdy tylko otrzyma odpowiedź z serwera backendu, ponieważ rozmiar nagłówka przekracza dozwolony limit.
- error:
Błąd zobaczysz w odpowiedzi o błędzie Odpowiedź wysłana do klienta wysłanej przez Apigee Edge jak pokazano poniżej:
- Zanotuj wartości błędu ze śladu. Powyższy przykładowy ślad pokazuje:
- Błąd:
502 Bad Gateway. - Treść błędu:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Błąd:
W śladzie przejdź do etapu AX (zapisane dane analityczne) i kliknij go, aby zobaczyć powiązane szczegóły.
Zanotuj wartość tych elementów:
Nagłówki błędów Wartość X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source targetTreść błędu: treść {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
Aby zdiagnozować błąd za pomocą logów dostępu NGINX:
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów dostępu NGINX, aby
określić kluczowe informacje o błędzie HTTP
502 Bad Gateway. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) występują błędy
502z kodem błęduprotocol.http.TooBigHeaderslub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu502. Jeśli znajdziesz błędy
502, w których X-Apigee-fault-code pasuje do wartościprotocol.http.TooBigHeaders, określ wartość X-Apigee-fault-source.Przykładowy błąd 502 z logu dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma te wartości dla X-Apigee-fault-code i X-Apigee-fault-source:
Nagłówki błędów Wartość X-Apigee-fault-code protocol.http.TooBigHeadersX-Apigee-fault-source target
Przyczyna: rozmiar nagłówków w odpowiedzi jest większy niż dozwolony limit
Diagnostyka
- Określ kod błędu, źródło błędu i rozmiar ładunku odpowiedzi zaobserwowanego błędu za pomocą monitorowania interfejsów API, narzędzia Trace lub logów dostępu NGINX zgodnie z opisem w sekcji Typowe czynności diagnostyczne.
- Jeśli Źródło błędu ma wartość
target, oznacza to, że odpowiedź wysłana przez serwer docelowy lub serwer backendu do Apigee zawiera nagłówki, których rozmiar jest większy niż dozwolony limit w Apigee Edge. - Możesz sprawdzić, czy odpowiedź z serwera docelowego lub serwera backendu zawiera nagłówki, których rozmiar jest
większy niż dozwolony limit, za pomocą jednej z tych metod:
Komunikat o błędzie
Aby sprawdzić, czy komunikat o błędzie jest prawidłowy:
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, to sprawdź
faultstring. Thefaultstringwskazuje, że rozmiar nagłówka odpowiedzi przekroczył dozwolony limit.Przykładowy komunikat o błędzie:
"faultstring":"response headers size exceeding 25,600"
W powyższym komunikacie o błędzie zwróć uwagę, że w
faultstringodpowiedź zawiera nagłówki, których łączny rozmiar przekracza dozwolony limit.Rzeczywiste żądanie
Aby sprawdzić, czy rzeczywiste żądanie jest prawidłowe:
Jeśli masz dostęp do rzeczywistego żądania wysłanego do serwera docelowego lub serwera backendu, wykonaj te czynności:
- Jeśli jesteś użytkownikiem chmury publicznej lub prywatnej, wyślij żądanie bezpośrednio do serwera backendu z samego serwera backendu lub z innego komputera, z którego możesz wysyłać żądania do serwera backendu.
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz też wysłać żądanie do serwera backendu z jednego z procesorów komunikatów.
- Sprawdź odpowiedź otrzymaną z serwera backendu, a w szczególności oblicz i zweryfikuj łączny rozmiar nagłówków przekazanych w odpowiedzi.
Jeśli stwierdzisz, że rozmiar nagłówków w ładunku odpowiedzi jest większy niż dozwolony limit w Apigee Edge, to jest to przyczyna problemu.
Przykładowa odpowiedź z serwera docelowego:
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 intactW powyższym przykładzie
Testheader1iTestheader2mają większe rozmiary, co jest przyczyną tego błędu, ponieważ przekracza dozwolony limit w Apigee Edge.
Logi procesora komunikatów
Aby sprawdzić, czy logi procesora komunikatów są prawidłowe:
Jeśli jesteś użytkownikiem chmury prywatnej, możesz użyć logów procesora komunikatów, aby sprawdzić, czy rozmiar nagłówków odpowiedzi przekroczył dozwolony limit w Apigee Edge.
Sprawdź logi procesora komunikatów:
/opt/apigee/var/log/edge-message-processor/logs/system.log- Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) występują błędy
502lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu502. Możesz użyć tego ciągu wyszukiwania:grep -ri "response headers size exceeding"
- Znajdziesz wiersze z
system.logpodobne do tych: Rozmiar nagłówków odpowiedzi może się różnić w Twoim przypadku: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)
-
Gdy tylko procesor komunikatów otrzyma odpowiedź z serwera backendu lub serwera docelowego i stwierdzi, że łączny rozmiar nagłówków jest większy niż 25 KB, zatrzyma się i zgłosi błąd:
response headers size exceeding 25,600Oznacza to, że łączny rozmiar nagłówka jest większy niż 25 KB, a Apigee zgłasza błąd, gdy rozmiar zaczyna przekraczać limit 25 KB z kodem błędu jako
protocol.http.TooBigHeaders
Rozwiązanie
Napraw rozmiar
Opcja 1 [zalecana]: zmień aplikację serwera docelowego, aby nie wysyłała nagłówków o rozmiarze przekraczającym limit Apigee
- Przeanalizuj przyczynę, dla której konkretny serwer docelowy wysyła nagłówki odpowiedzi o rozmiarze większym niż dozwolony limit określony w sekcji Limity.
- Jeśli nie jest to pożądane, zmodyfikuj aplikację serwera backendu, aby wysyłała nagłówki odpowiedzi o rozmiarze mniejszym niż dozwolony limit w Apigee Edge.
- Sprawdź, czy informacje o nagłówku można wysłać w treści odpowiedzi.
- Jeśli to możliwe, wyślij w treści odpowiedzi wszystkie duże informacje, które planujesz wysłać w ramach nagłówka. Dzięki temu nie przekroczysz limitu nagłówka odpowiedzi.
CwC
Opcja 2 : użyj właściwości CwC, aby zwiększyć limit rozmiaru nagłówka odpowiedzi
Apigee udostępnia właściwość CwC, która pozwala zwiększyć limit rozmiaru nagłówków odpowiedzi. Więcej informacji znajdziesz w artykule Konfigurowanie limitów procesora komunikatów
Limity
Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać nagłówków o rozmiarze większym niż dozwolony limit zgodnie z dokumentacją dotyczącą rozmiaru nagłówka żądania lub odpowiedzi w sekcji Limity Apigee Edge.
- Jeśli jesteś użytkownikiem chmury publicznej, maksymalny limit rozmiaru nagłówków żądania i odpowiedzi jest zgodny z dokumentacją dotyczącą rozmiaru nagłówka żądania lub odpowiedzi w sekcji Limity Apigee Edge.
- Jeśli jesteś użytkownikiem chmury prywatnej , możesz zmodyfikować domyślny maksymalny limit rozmiaru nagłówków żądania i odpowiedzi (chociaż nie jest to zalecane). Maksymalny limit rozmiaru nagłówka odpowiedzi możesz określić, wykonując instrukcje opisane w sekcji Jak sprawdzić aktualny limit.
Jak sprawdzić aktualny limit?
W tej sekcji dowiesz się, jak sprawdzić, czy właściwość HTTPResponse.headers.limit została
zaktualizowana o nową wartość w procesorach komunikatów.
- Na komputerze procesora komunikatów wyszukaj właściwość
HTTPResponse.headers.limitw katalogu/opt/apigee/edge-message-processor/confi sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik powyższego polecenia jest taki:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
W powyższym przykładzie zwróć uwagę, że właściwość
HTTPResponse.headers.limitzostała ustawiona na wartość25kwhttp.properties.Oznacza to, że limit rozmiaru ładunku odpowiedzi skonfigurowany w Apigee dla chmury prywatnej wynosi 25 KB.
Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, przejdź do sekcji Informacje diagnostyczne, które musisz zebrać.
Informacje diagnostyczne, które musisz zebrać
Zbierz te informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa proxy interfejsu API
- Pełne polecenie
curlużyte do odtworzenia błędu502 - Plik śledzenia żądań do interfejsu API
- Pełne dane wyjściowe odpowiedzi z serwera docelowego lub serwera backendu wraz z rozmiarem nagłówków
Jeśli jesteś użytkownikiem chmury prywatnej, podaj te informacje:
- Pełny komunikat o błędzie zaobserwowany w przypadku nieudanych żądań
- Nazwa organizacji
- Nazwa środowiska
- Pakiet proxy interfejsu API
- Plik śledzenia nieudanych żądań do interfejsu API
- Pełne polecenie
curlużyte do odtworzenia błędu502 - Pełne dane wyjściowe odpowiedzi z serwera docelowego lub serwera backendu wraz z rozmiarem nagłówków
Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Logi systemowe procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log