502 Nieprawidłowa brama – TooBigHeaders

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 502 Bad Gateway z kod błędu protocol.http.TooBigHeaders jako odpowiedź dla interfejsu API połączeń.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 502 Bad Gateway

Możesz też zobaczyć następujący 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 środowisko docelowe/backend z serwera Apigee Edge w ramach odpowiedzi HTTP jest większa niż dozwolona 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 konkretnego nagłówka lub suma rozmiarów nagłówków wszystkich nagłówki wysłane przez serwer docelowy/backend w ramach odpowiedzi HTTP do Apigee Edge przekracza dozwolony limit w Apigee Edge. Użytkownicy chmury publicznej i prywatnej Edge

Typowe kroki diagnostyki

Użyj jednego z tych narzędzi lub metod, aby zdiagnozować ten błąd:

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 uprawnieniami odpowiednią rolę.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

  3. Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
  4. Wybierz okres, w którym zaobserwowano błędy.
  5. Aby zawęzić kod błędu, możesz wybrać filtr Serwer proxy.
  6. Porównaj Kod błędu z czasem.
  7. Wybierz komórkę, która ma kod błędu protocol.http.TooBigHeaders jako poniżej:

    ( wyświetl większy obraz)

  8. Pojawi się informacja o kodzie błędu protocol.http.TooBigHeaders jak pokazano 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ści target i Błąd Code ma wartość protocol.http.TooBigHeaders, która oznacza, że odpowiedź HTTP z serwera docelowego/ backendu zawiera nagłówki o większym rozmiarze niż dozwolony limit w Apigee Edge.

Narzędzie śledzenia

  1. Włącz sesję śledzenia. oraz:
    1. Poczekaj, aż wystąpi błąd 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ź log czasu.
  3. Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd .
  4. Zazwyczaj ten błąd pojawia się w procesie o nazwie Error (Błąd) zaraz po tagu Faza żądania wysłanego do serwera docelowego, jak pokazano poniżej:

    ( wyświetl większy obraz)

    Zanotuj wartości błędu z śladu:

    • 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 jako gdy tylko otrzyma odpowiedź od serwera backendu ze względu na rozmiar nagłówka przekraczaniem dozwolonego limitu.

  5. Błąd będzie widoczny w odpowiedzi wysłanej do klienta. odpowiedź z błędem wysłana przez Apigee Edge:

    ( wyświetl większy obraz)

  6. Zanotuj wartości błędu z śladu. 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 fazy AX (zarejestrowane dane Analytics) w śledzeniu i kliknij go, aby zobaczyć powiązane informacje.

    ( wyświetl większy obraz)

    Zwróć uwagę na jedną z tych wartości:

    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żywać logów dostępu NGINX do: określić kluczowe informacje o tagu HTTP 502 Bad Gateway.
  2. Sprawdź logi dostępu NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    Gdzie: wartości ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.

  3. Wyszukaj błędy (502) z kodem błędu protocol.http.TooBigHeaders w określonym czasie (jeśli problem wystąpił w przeszłości) lub jeśli masz jakieś żądania, które nadal kończą się niepowodzeniem 502
  4. Jeśli znajdziesz błędy 502 z kodem błędu X-Apigee-fault-code pasujące do wartości protocol.http.TooBigHeaders, a następnie określ wartość X-Apigee-fault-source..

    Przykładowy błąd 502 z dziennika dostępu NGINX:

    Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla: 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 przekracza dozwolony limit

Diagnostyka

  1. Określ kod błędu, źródło błędu i rozmiar ładunku odpowiedzi dla zaobserwowany błąd za pomocą monitorowania interfejsów API, narzędzia Trace lub logów dostępu NGINX, jak wyjaśniono w artykule Najczęstsze czynności diagnostyczne.
  2. Jeśli Źródło błędu ma wartość target, oznacza to, że odpowiedź wysłana przez serwer docelowy/backend do Apigee zawiera nagłówki o rozmiarze większym przekracza dozwolony limit w Apigee Edge.
  3. Możesz sprawdzić, czy odpowiedź z środowiska docelowego/backendu zawiera nagłówki o rozmiarze jest większa niż dozwolony limit przy użyciu jednej z tych metod:

    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, przeczytaj faultstring. Znak faultstring oznacza, że rozmiar nagłówka odpowiedzi przekracza dozwolony limit.

    Przykładowy komunikat o błędzie:

    "faultstring":"response headers size exceeding 25,600"
    

    W tym komunikacie o błędzie faultstring zwróć uwagę, że odpowiedź zawiera nagłówki, których łączny rozmiar przekracza dozwolony limit.

    Rzeczywiste żądanie

    Aby przeprowadzić weryfikację na podstawie rzeczywistego żądania:

    Jeśli masz dostęp do rzeczywistego żądania wysłanego do serwera docelowego/backendu, Następnie wykonaj te czynności:

    1. Jeśli korzystasz z chmury publicznej lub Private Cloud, prześlij prośbę bezpośrednio do serwera backendu z serwera backendu lub jakiegokolwiek innego maszynie, z której możesz wysyłać żądania do backendu serwera.
    2. Jeśli jesteś użytkownikiem Private Cloud, możesz też wysłać prośbę do z serwera backendu z jednego z procesorów wiadomości.
    3. Sprawdź odpowiedź otrzymaną od serwera backendu obliczyć i sprawdzić łą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 właśnie 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 Testheader1 i Testheader2 mają większe rozmiary, co jest przyczyną dla tego błędu, ponieważ przekracza dozwolony limit w Apigee Edge

    .

    Logi procesora wiadomości

    Aby przeprowadzić weryfikację za pomocą logów procesora wiadomości:

    Jeśli jesteś użytkownikiem chmury prywatnej, możesz używać logów procesora wiadomości do: sprawdź, czy rozmiar nagłówków odpowiedzi nie przekracza dozwolony limit w Apigee Edge.

    1. Sprawdź dzienniki procesora wiadomości:

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

    2. Wyszukaj błędy 502 w konkretnym okresie czasu trwania (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, nadal występują błędy z użyciem funkcji 502. Możesz użyć takiego ciągu wyszukiwania:
      grep -ri "response headers size exceeding"
      
    3. Zobaczysz wiersze z domeny system.log podobne do tych poniżej. Rozmiar nagłówków odpowiedzi może być inny 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 wiadomości otrzyma odpowiedź z backendu/docelowego i stwierdza, że łączny rozmiar nagłówków przekracza 25 KB, zatrzymuje się i wyświetla błąd:

      response headers size exceeding 25,600

      Oznacza to, że całkowity rozmiar nagłówka wynosi więcej niż 25 KB, a Apigee zgłasza błąd, gdy rozmiar zaczyna przekraczać limit 25 KB z kodem błędu. jako protocol.http.TooBigHeaders

Rozdzielczość

Popraw rozmiar

Opcja nr 1 [zalecana]: popraw aplikację serwera docelowego tak, aby nie wysyłała rozmiarów nagłówków przekroczenie limitu Apigee

  1. Przeanalizuj, dlaczego określony serwer docelowy ma większy rozmiar nagłówka odpowiedzi niż dozwolony limit określony w sekcji Limity.
  2. Jeśli nie jest to pożądane, zmodyfikuj aplikację serwera backendu tak, aby wysyłała nagłówków odpowiedzi, których rozmiar jest mniejszy niż dozwolony limit Apigee Edge
  3. Sprawdź, czy informacje z nagłówka można wysłać w ramach treści odpowiedzi.
  4. Jeśli to możliwe, przesyłaj wszelkie duże informacje, które planujesz wysłać w ramach nagłówka w treści odpowiedzi. Dzięki temu nie przekroczysz czasu odpowiedzi limitu nagłówka.
.

CwC

Opcja 2. Aby zwiększyć limit rozmiaru nagłówka odpowiedzi, użyj właściwości CCC

Apigee zapewnia Właściwość CwC, która pozwala zwiększyć limit rozmiaru nagłówków odpowiedzi. Więcej informacji: Konfigurowanie limitów dla procesora wiadomości

Limity

Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać rozmiary nagłówków większe niż dozwolony limit zgodnie z dokumentacją rozmiaru nagłówka żądania/odpowiedzi w Limity Apigee Edge.

  1. Jeśli jesteś użytkownikiem Public Cloud, maksymalny limit dla Rozmiar nagłówków żądania i odpowiedzi jest zgodny z informacjami w sekcji Rozmiar nagłówka żądania/odpowiedzi w: Limity Apigee.
  2. Jeśli jesteś użytkownikiem Private Cloud , możliwe, że domyślne maksimum zostało zmienione limit rozmiaru nagłówków żądania i odpowiedzi (mimo że nie jest to zalecane działanie). Maksymalny rozmiar nagłówka odpowiedzi możesz określić, postępując zgodnie z instrukcjami w Jak sprawdzić aktualny limit

Jak sprawdzić obecny limit?

Z tej sekcji dowiesz się, jak sprawdzić, czy usługa HTTPResponse.headers.limit została zaktualizowana o nową wartość w procesorach wiadomości.

  1. Na komputerze z procesorem wiadomości wyszukaj właściwość HTTPResponse.headers.limit w: /opt/apigee/edge-message-processor/conf i sprawdź w Zobacz, 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 przykładowych danych wyjściowych powyżej zwróć uwagę, że właściwość HTTPResponse.headers.limit została ustawiona na wartość 25k w http.properties.

    Wskazuje to, że limit rozmiaru ładunku odpowiedzi skonfigurowanego w Apigee dla prywatnego Google Cloud ma 25 KB.

Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Konieczne jest zbieranie informacji diagnostycznych.

Musi zbierać informacje diagnostyczne

Zbierz te informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:

Jeśli jesteś użytkownikiem Public Cloud, 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ń do interfejsu API
  • Pełne dane wyjściowe odpowiedzi z serwera docelowego/backendowego wraz z rozmiarem nagłówków

Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:

  • Pełny komunikat o błędzie zaobserwowany dla nieudanych żądań
  • Nazwa organizacji
  • Nazwa środowiska
  • Pakiet serwera proxy interfejsu 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/backendowego 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 przez wartości rzeczywiste.

  • Dzienniki systemowe procesora wiadomości /opt/apigee/var/log/edge-message-processor/logs/system.log