502 Nieprawidłowa brama – TooBigHeaders

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:

  1. Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
  2. Przejdź do organizacji, w której chcesz zbadać problem.

  3. Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
  4. Wybierz konkretny przedział czasu, w którym wystąpiły błędy.
  5. Aby zawęzić kod błędu, możesz wybrać filtr Proxy.
  6. Wykreśl kod błędu względem czasu.
  7. Wybierz komórkę z kodem błędu protocol.http.TooBigHeaders jak pokazano poniżej:

    ( powiększ obraz)

  8. Zobaczysz informacje o kodzie błędu protocol.http.TooBigHeaders jak pokazano poniżej:

    ( powiększ obraz)

  9. Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.

    ( powiększ obraz)

  10. W oknie Logi zanotuj te informacje:
    • Kod stanu: 502
    • Źródło błędu: target
    • Kod błędu: protocol.http.TooBigHeaders.
  11. 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

  1. Włącz sesję śledzenia i wykonaj jedną z tych czynności:
    1. Poczekaj na wystąpienie błędu 502 Bad Gateway lub
    2. Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz błąd 502 Bad Gateway.
  2. Wybierz jedno z nieudanych żądań i sprawdź ślad.
  3. Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
  4. 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:

    ( powiększ obraz)

    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.

  5. Błąd zobaczysz w odpowiedzi o błędzie Odpowiedź wysłana do klienta wysłanej przez Apigee Edge jak pokazano poniżej:

    ( powiększ obraz)

  6. 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"}}}
  7. W śladzie przejdź do etapu AX (zapisane dane analityczne) i kliknij go, aby zobaczyć powiązane szczegóły.

    ( powiększ obraz)

    Zanotuj wartość tych elementów:

    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 za pomocą logów dostępu NGINX:

  1. 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.
  2. Sprawdź 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.

  3. Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) występują błędy 502 z kodem błędu protocol.http.TooBigHeaders lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu 502.
  4. Jeśli znajdziesz błędy 502, w których X-Apigee-fault-code pasuje do wartości protocol.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.TooBigHeaders
    X-Apigee-fault-source target

Przyczyna: rozmiar nagłówków w odpowiedzi jest większy niż dozwolony limit

Diagnostyka

  1. 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.
  2. 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.
  3. 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. The faultstring wskazuje, ż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 faultstring odpowiedź 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:

    1. 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.
    2. Jeśli jesteś użytkownikiem chmury prywatnej, możesz też wysłać żądanie do serwera backendu z jednego z procesorów komunikatów.
    3. Sprawdź odpowiedź otrzymaną z serwera backendu, a w szczególności oblicz i zweryfikuj łączny rozmiar nagłówków przekazanych w odpowiedzi.
    4. 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 intact
      

      W powyższym przykładzie Testheader1 i Testheader2 mają 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.

    1. Sprawdź logi procesora komunikatów:

      /opt/apigee/var/log/edge-message-processor/logs/system.log

    2. Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) występują błędy 502 lub czy nadal występują żądania, które kończą się niepowodzeniem z powodu błędu 502. Możesz użyć tego ciągu wyszukiwania:
      grep -ri "response headers size exceeding"
      
    3. Znajdziesz wiersze z system.log podobne 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)
    4. 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,600

      Oznacza 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

  1. 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.
  2. 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.
  3. Sprawdź, czy informacje o nagłówku można wysłać w treści odpowiedzi.
  4. 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.

  1. 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.
  2. 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.

  1. Na komputerze procesora komunikatów 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
    
  2. Przykładowy wynik powyższego polecenia jest taki:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
  3. W powyższym przykładzie zwróć uwagę, że właściwość HTTPResponse.headers.limit została ustawiona na wartość 25k w http.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 curl użyte do odtworzenia błędu 502
  • 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 curl użyte do odtworzenia błędu 502
  • 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_log

    Gdzie: 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