Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
W odpowiedzi na wywołania interfejsu API aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway
z kodem błędu protocol.http.TooBigHeaders
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 502 Bad Gateway
Oprócz tego może 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, jeśli łączny rozmiar nagłówków wysyłanych przez serwer docelowy/backend 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 dotyczące |
---|---|---|
Rozmiar nagłówków w odpowiedzi przekracza dozwolony limit | Rozmiar nagłówka danego nagłówka lub suma rozmiarów wszystkich nagłówków wysyłanych przez serwer docelowy/backendowy w ramach odpowiedzi HTTP na Apigee Edge jest większa niż dozwolony limit w Apigee Edge. | Użytkownicy chmury publicznej i prywatnej usługi Edge |
Najczęstsze kroki diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
- Możesz wybrać filtr Serwer proxy, aby zawęzić liczbę kodów błędów.
- Porównaj kod błędu z czasem.
Wybierz komórkę z kodem błędu
protocol.http.TooBigHeaders
, jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.TooBigHeaders
wyświetlą się poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na 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/ serwera backendu ma nagłówki, których rozmiar jest większy niż dozwolony limit w Apigee Edge.
Narzędzie do śledzenia
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu
502 Bad Gateway
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API i odtwórz błąd
502 Bad Gateway
.
- Poczekaj na wystąpienie błędu
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Ten błąd można zwykle zobaczyć w procesie o nazwie Błąd tuż po etapie Żądanie wysłane do serwera docelowego, jak pokazano poniżej:
Zapisz wartości błędu ze logu czasu:
- błąd:
response headers size exceeding 25,600
- error.class:
com.apigee.errors.http.server.BadGateway
Oznacza to, że Apigee Edge (komponent procesora wiadomości) zgłasza błąd, gdy tylko otrzyma odpowiedź z serwera backendu z powodu przekroczenia rozmiaru nagłówka.
- błąd:
Błąd może się pojawić w odpowiedzi o błędzie Odpowiedź wysłana do klienta wysłanej przez Apigee Edge, jak pokazano poniżej:
- Zapisz wartości błędu z logu czasu. Powyższy przykładowy log czasu pokazuje:
- Błąd:
502 Bad Gateway
. - Treść błędu:
{"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
- Błąd:
Przejdź do etapu AX (rejestrowane dane Analytics) w logu czasu i kliknij go, aby wyświetlić powiązane szczegóły.
Zwróć uwagę na te kwestie:
Nagłówki błędów Wartość X-Apigee-fault-code protocol.http.TooBigHeaders
X-Apigee-fault-source target
Treść błędu: treść {"fault":{"faultstring":"response headers size exceeding 25,600","detail":{"errorcode":"protocol.http.TooBigHeaders"}}}
NGINX
Aby zdiagnozować błąd przy użyciu logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX do określenia kluczowych informacji o HTTP
502 Bad Gateway
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy występują jakieś błędy
502
z kodem błęduprotocol.http.TooBigHeaders
w danym czasie (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z502
. Jeśli znajdziesz błędy
502
z kodem X-Apigee-fault-code pasującym do wartości X-Apigee-fault-code , sprawdź wartość źródła błędów X-Apigee-fault-code .Przykładowy błąd 502 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodu X-Apigee-fault-code i X-Apigee-fault-code :
Nagłówki błędów Wartość X-Apigee-fault-code protocol.http.TooBigHeaders
X-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 dla błędu zaobserwowanego przy użyciu monitorowania interfejsu API, narzędzia do śledzenia lub logów dostępu NGINX zgodnie z opisem w częstych krokach diagnostyki.
- Jeśli źródło błędów ma wartość
target
, oznacza to, że odpowiedź wysłana przez serwer docelowy/backend do Apigee zawiera nagłówki, których rozmiar przekracza dozwolony limit w Apigee Edge. - Za pomocą jednej z tych metod możesz sprawdzić, czy odpowiedź z środowiska docelowego lub backendu zawiera nagłówki, których rozmiar przekracza dozwolony limit:
Komunikat o błędzie
Aby przeprowadzić weryfikację przy użyciu komunikatu o błędzie:
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z dokumentem
faultstring
.faultstring
oznacza, ż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ę na to, że
faultstring
ma nagłówki, których łączny rozmiar przekracza dozwolony limit.Rzeczywista prośba
Aby sprawdzić poprawność za pomocą rzeczywistego żądania:
Jeśli masz dostęp do rzeczywistego żądania wysłanego do serwera docelowego lub backendu, wykonaj te czynności:
- Jeśli jesteś użytkownikiem chmury publicznej/chmury prywatnej, wyślij żądanie bezpośrednio do serwera backendu z samego serwera backendu lub dowolnej innej maszyny, z której możesz je wysyłać do serwera backendu.
- Jeśli jesteś użytkownikiem Private Cloud, możesz też wysłać żądanie do serwera backendu z jednego z podmiotów przetwarzających wiadomości.
- Sprawdź odpowiedź otrzymaną z serwera backendu, a następnie ją oblicz i sprawdź łączny rozmiar nagłówków przekazanych w odpowiedzi.
Jeśli okaże się, że rozmiar nagłówków w ładunku odpowiedzi przekracza dozwolony limit w Apigee Edge, to jest przyczyną 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 elementy
Testheader1
iTestheader2
mają wyższe rozmiary, co jest przyczyną tego błędu, ponieważ przekracza on dozwolony limit w Apigee Edge.
Logi procesora wiadomości
Aby sprawdzić poprawność danych za pomocą dzienników procesora wiadomości:
Jeśli korzystasz z chmury prywatnej, możesz użyć logów procesora wiadomości, aby sprawdzić, czy rozmiar nagłówków odpowiedzi przekroczył dozwolony limit w Apigee Edge.
Sprawdź dzienniki procesora wiadomości:
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Sprawdź, czy w danym okresie wystąpiły jakieś błędy
502
(jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które wciąż kończą się niepowodzeniem z użyciem metody502
. Możesz użyć tego ciągu wyszukiwania:grep -ri "response headers size exceeding"
- Zobaczysz wiersze ze źródła
system.log
podobne do tych poniżej. W Twoim przypadku rozmiar nagłówków odpowiedzi może być inny: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 wiadomości otrzyma odpowiedź od backendu/serwera docelowego i ustali, że łączny rozmiar nagłówków przekracza 25 KB, zatrzyma się i zgłosi błąd:
response headers size exceeding 25,600
Oznacza to, że całkowity rozmiar nagłówka przekracza 25 KB, a Apigee zgłasza błąd, gdy rozmiar zaczyna przekraczać limit 25 KB z kodem błędu
protocol.http.TooBigHeaders
Rozdzielczość
Stały rozmiar
Opcja nr 1 [zalecana]: napraw aplikację serwera docelowego, aby nie wysyłała nagłówków o rozmiarze przekraczającym limit Apigee
- Sprawdź, dlaczego określony serwer docelowy wysyła rozmiar nagłówka odpowiedzi większy niż dozwolony limit określony w sekcji Limity.
- Jeśli nie jest to pożądane, zmodyfikuj aplikację serwera backendu tak, aby przesyłała nagłówki odpowiedzi, których rozmiar jest mniejszy niż dozwolony limit w Apigee Edge.
- Sprawdź, czy informacje z nagłówka można wysyłać w treści odpowiedzi.
- Jeśli to możliwe, wszelkie duże informacje, które planujesz wysłać, wyślij jako część nagłówka w treści odpowiedzi. Dzięki temu nie przekroczysz limitu nagłówków 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 o konfigurowaniu limitów procesora wiadomości
Ograniczenia
Apigee oczekuje, że aplikacja kliencka i serwer backendu nie wysyłają nagłówków o rozmiarach większych niż dozwolony limit, który został określony dla rozmiaru nagłówka żądania/odpowiedzi w limitach Edge Apigee.
- Jeśli jesteś użytkownikiem chmury publicznej, maksymalny rozmiar nagłówków żądań i odpowiedzi jest zgodny z rozmiarem nagłówka żądania/odpowiedzi w limitach Apigee Edge.
- Jeśli jesteś użytkownikiem Private Cloud , możesz zmienić domyślny maksymalny limit rozmiaru nagłówków żądań i odpowiedzi (chociaż nie jest to zalecane). Maksymalny limit rozmiaru nagłówka odpowiedzi możesz określić, wykonując instrukcje z artykułu Jak sprawdzić bieżący limit.
Jak sprawdzić aktualny limit?
Ta sekcja wyjaśnia, jak sprawdzić, czy właściwość HTTPResponse.headers.limit
została zaktualizowana o nową wartość w procesorach wiadomości.
- Na komputerze procesora wiadomości wyszukaj właściwość
HTTPResponse.headers.limit
w katalogu/opt/apigee/edge-message-processor/conf
i sprawdź, jaka wartość została ustawiona, jak pokazano poniżej:grep -ri "HTTPResponse.headers.limit" /opt/apigee/edge-message-processor/conf
- Przykładowy wynik tego polecenia:
/opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
W powyższych przykładach wyjściowych warto zauważyć, że właściwość
HTTPResponse.headers.limit
została ustawiona z wartością25k
w językuhttp.properties
.Oznacza to, że limit rozmiaru ładunku odpowiedzi skonfigurowany w Apigee dla Private Cloud to 25 KB.
Jeśli nadal będziesz potrzebować pomocy zespołu pomocy Apigee, przejdź do artykułu Wymagane jest zbieranie informacji diagnostycznych.
Musisz zebrać informacje diagnostyczne
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 serwera proxy interfejsu API
- Wykonaj polecenie
curl
użyte do odtworzenia błędu502
- Plik śledzenia żądań interfejsu API
- Pełne dane wyjściowe odpowiedzi z serwera docelowego lub backendu wraz z rozmiarem nagłówków
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowany pełny komunikat o błędzie dotyczący nieudanych żądań
- Nazwa organizacji
- Nazwa środowiska
- Pakiet proxy API
- Plik śledzenia nieudanych żądań do interfejsu API
- Wykonaj polecenie
curl
użyte do odtworzenia błędu502
- Pełne dane wyjściowe odpowiedzi z serwera docelowego lub backendu wraz z rozmiarem nagłówków
Logi dostępu NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Gdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
- Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log