502 Nieprawidłowa brama – TooBigHeaders

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:

  1. Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

  3. Otwórz stronę Analiza > Monitorowanie interfejsów API > Zbadaj.
  4. Wybierz przedział czasu, w którym zaobserwowano błędy.
  5. Możesz wybrać filtr Serwer proxy, aby zawęzić liczbę kodów błędów.
  6. Porównaj kod błędu z czasem.
  7. Wybierz komórkę z kodem błędu protocol.http.TooBigHeaders, jak pokazano poniżej:

    ( wyświetl większy obraz)

  8. Informacje o kodzie błędu protocol.http.TooBigHeaders wyświetlą się poniżej:

    ( wyświetl większy obraz)

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

    ( wyświetl większy obraz)

  10. W oknie Logi zwróć uwagę na 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/ serwera backendu ma nagłówki, których rozmiar jest większy niż dozwolony limit w Apigee Edge.

Narzędzie do śledzenia

  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, wykonaj wywołanie interfejsu API i odtwórz błąd 502 Bad Gateway.
  2. Wybierz 1 z nieudanych żądań i sprawdź log czasu.
  3. Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
  4. 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:

    ( wyświetl większy obraz)

    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.

  5. 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:

    ( wyświetl większy obraz)

  6. 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"}}}
  7. Przejdź do etapu AX (rejestrowane dane Analytics) w logu czasu i kliknij go, aby wyświetlić powiązane szczegóły.

    ( wyświetl większy obraz)

    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:

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

  3. Sprawdź, czy występują jakieś błędy 502 z kodem błędu protocol.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 z 502.
  4. 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

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

    1. 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.
    2. 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.
    3. Sprawdź odpowiedź otrzymaną z serwera backendu, a następnie ją oblicz i sprawdź łączny rozmiar nagłówków przekazanych w odpowiedzi.
    4. 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 intact
      

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

    1. Sprawdź dzienniki procesora wiadomości:

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

    2. 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 metody 502. Możesz użyć tego ciągu wyszukiwania:
      grep -ri "response headers size exceeding"
      
    3. 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)
      
    4. 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

  1. Sprawdź, dlaczego określony serwer docelowy wysyła rozmiar nagłówka odpowiedzi większy niż dozwolony limit określony w sekcji Limity.
  2. 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.
  3. Sprawdź, czy informacje z nagłówka można wysyłać w treści odpowiedzi.
  4. 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.

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

  1. 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
    
  2. Przykładowy wynik tego polecenia:
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPResponse.headers.limit=25k
    
  3. 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ęzyku http.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łędu 502
  • 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łędu 502
  • 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