502 Nieprawidłowa bramka – TooBigLine

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 kodem błędu protocol.http.TooBigLine jako odpowiedź na wywołania interfejsu API.

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 line size exceeding 2,048",
      "detail":{
         "errorcode":"protocol.http.TooBigLine"
      }
   }
}

Możliwe przyczyny

Ten błąd występuje, jeśli rozmiar wiersza odpowiedzi wysyłany przez z serwera docelowego/backendu do Apigee Długość krawędzi w odpowiedzi HTTP przekracza dopuszczalne maksimum limit w Apigee Edge.

Zanim przyjrzymy się możliwym przyczynom tego błędu, wyjaśnijmy, co wiersz odpowiedzi i jak sprawdzić ich rozmiar.

Opis wiersza odpowiedzi

Typowa odpowiedź HTTP składa się z 3 części:

  1. Linia stanu (w Apigee nazywana wierszem odpowiedzi)
  2. ( Zestaw nagłówków HTTP )
  3. [ Treść ]

Wiersz odpowiedzi składa się z 3 części: wersji protokołu, po której następuje wartość numeryczna kodu stanu i powiązanego z nim wyrażenia tekstowego, jak pokazano poniżej:

Response-Line   = <HTTP-Version> <Status-Code> <Reason-Phrase>

Gdy aplikacja serwera docelowego/serwera backendu wysyła odpowiedź HTTP, pierwszy wiersz „Wysłane” reprezentuje wiersz odpowiedzi w sposób opisany powyżej. Po nim następuje znak nagłówki i treść odpowiedzi/ładunek.Poniższy przykładowy zrzut ekranu pokazuje typową curl, Request (Żądanie) i Response (Odpowiedź) (wraz Response-Line).

Rozmiar wiersza odpowiedzi

  1. W omawianym wyżej przykładzie wiersz start (pierwszy wiersz) w odpowiedzi również Response-Line.

    HTTP/1.1 200 OK
    

    Ten wiersz odpowiedzi ma rozmiar ~15 bytes, ponieważ zawiera 15 ASCII characters. Ponieważ jest to w ramach dozwolony limit w Apigee Edge, odpowiedź jest wysyłana do klienta bez z Apigee Edge.

  2. Podobnie jeśli spojrzysz na faultstring w Komunikat o błędzie pokazany powyżej, zawiera "response line size exceeding 2,048". Wskazuje to, że wiersz Response-Line w odpowiedzi HTTP wysłana przez serwer docelowy/backend przekroczył 2048 bajtów.

Objaśnienie dużego wiersza odpowiedzi

Zgodnie z definicją Status-Line (nazywany tutaj Response-Line) oraz typowe żądania HTTP oraz rozmiar będzie znacznie mniejszy niż zdefiniowany domyślny limit 2 KB w Apigee Edge, dlatego nie możemy osiągnęliśmy limit. Poniżej podajemy jednak kilka możliwych sytuacji, w których możesz przekroczyć ten limit:

  1. Serwer docelowy/backend nie jest systemem HTTP. Może odpowiadać z użyciem protokołu innego niż HTTP .
  2. Serwer docelowy/backend ma problemy i wysyła długi wiersz odpowiedzi w ramach żądania HTTP .

Przeczytaj więcej na ten temat tutaj: Otrzymuję błąd Protocol.http.TooBigLine, „Rozmiar wiersza odpowiedzi przekraczający 2048.

Oto możliwe przyczyny tego błędu:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Rozmiar wiersza odpowiedzi przekracza dozwolony limit Rozmiar wiersza odpowiedzi wysłanego przez serwer docelowy/backend w ramach Odpowiedź HTTP do Apigee Edge jest większa niż 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.TooBigLine jako poniżej:

    ( wyświetl większy obraz)

  8. Pojawi się informacja o kodzie błędu protocol.http.TooBigLine jak pokazano poniżej:

    ( wyświetl większy obraz)

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

  10. W oknie Logi zwróć uwagę na te informacje:
    • Kod stanu: 502
    • Źródło błędu: target
    • Kod błędu: protocol.http.TooBigLine.
  11. Jeśli Źródło błędu ma wartości target i Błąd Code ma wartość protocol.http.TooBigLine, która oznacza, że odpowiedź HTTP z serwera docelowego/ backendu ma rozmiar wiersza odpowiedzi większy niż maksymalny dozwolony limit w Apigee Edge.

Narzędzie śledzenia

  1. Włącz sesję śledzenia. oraz:
    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ź log czasu.
  3. Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd .
  4. Zazwyczaj błąd pojawia się w sekcji flowinfo Błąd po prostu po fazie wysyłania żądania do serwera docelowego, jak pokazano poniżej:

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

    • błąd: response line exceeding 2,048
    • 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 z powodu rozmiaru wiersza odpowiedzi przekraczaniem dozwolonego limitu.

  5. Komunikat o błędzie wysłany do klienta będzie widoczny w sekcji Odpowiedź wysłana do Faza klienta, jak pokazano poniżej:

    ( wyświetl większy obraz)

  6. Zanotuj wartości błędu z śladu:
    • Błąd: 502 Bad Gateway.
    • Treść błędu: {"fault":{"faultstring":"response line exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}
  7. Możesz też przejść do fazy AX (statystyki zarejestrowane przez dane) w śledzeniu i kliknij go, aby zobaczyć szczegóły błędu.

    ( wyświetl większy obraz)

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

    Nagłówki żądania Wartość
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target
    Treść błędu : treść {"fault":{"faultstring":"response line size exceeding 2,048","detail":{"errorcode":"protocol.http.TooBigLine"}}}

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ślenie najważniejszych informacji o błędach HTTP 502.
  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) w danym okresie (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.TooBigLine, a następnie określ wartość X-Apigee-fault-source..

    Powyższy przykładowy wpis logu dostępu NGINX zawiera następujące wartości dla X- Kod błędu Apigee i X-Apigee-fault-source:

    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-code protocol.http.TooBigLine
    X-Apigee-fault-source target

Przyczyna: rozmiar wiersza odpowiedzi przekracza dozwolony limit

Diagnostyka

  1. Określ kod błędu i źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API. Logi monitorowania, narzędzia śledzenia lub logi dostępu NGINX zgodnie z opisem w artykule Najczęstsze czynności diagnostyczne.
  2. Jeśli Źródło błędu ma wartość target, oznacza to, że Rozmiar wiersza odpowiedzi wysłany przez aplikację serwera docelowego/serwera backendu do Apigee jest większy niż dozwolony limit w Apigee Edge.
  3. Możesz sprawdzić, czy rozmiar wiersza odpowiedzi przekroczył dozwolony limit 2 KB, używając jednego za pomocą poniższych 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, zapoznaj się z faultstring

    Przykładowy komunikat o błędzie:

    "faultstring":"response line size exceeding 2,048"
    

    Powyższy faultstring wskazuje, że rozmiar wiersza odpowiedzi przekroczył dozwolony Rozmiar pliku nie może przekraczać 2 KB.

    Rzeczywiste żądanie

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

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

    1. Sprawdź rozmiar wiersza odpowiedzi
    2. Jeśli rozmiar identyfikatora URI jest większy niż dozwolony limit w Apigee Edge, to jest przyczyną i rozpoznają problem.

      Przykładowa odpowiedź z serwera docelowego lub backendu:

      curl -v http://HOSTALIAS/test
      
      *   Trying 3.2.1.4...
      * TCP_NODELAY set
      * Connected to <hostalias> (3.2.1.4) port 80 (#0)
      > GET /test HTTP/1.1
      > Host: HOSTALIAS
      > User-Agent: curl/7.64.1
      > Accept: */*
      >
      < HTTP/1.1 200 1111…<trimmed>...11111111
      < Date: Mon, 26 Jul 2021 07:07:18 GMT
      < Content-Type: application/json
      < Content-Length: 269
      < Connection: keep-alive
      < Server: gunicorn/19.9.0
      < Access-Control-Allow-Origin: *
      < Access-Control-Allow-Credentials: true
      <
      {
      <Response Body>
      }
      * Connection #0 to host <hostalias> left intact
      * Closing connection 0
      

      W powyższym przypadku wiersz odpowiedzi HTTP/1.1 200 1111…<trimmed>...11111111 ma więcej niż 2 KB, czyli zawiera więcej niż 2 tys. znaków ASCII.

      Jeśli używasz innego klienta, możesz przejrzeć dzienniki klienta i spróbować aby sprawdzić rozmiar linii odpowiedzi wysyłanej do Apigee Edge.

    Logi procesora wiadomości

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

    Jeśli jesteś użytkownikiem Private Cloud, możesz używać logów procesora wiadomości do: sprawdź, czy rozmiar wiersza odpowiedzi nie przekroczył dozwolony limit w Apigee Edge.

    1. Ustal identyfikator wiadomości nieudanego żądania za pomocą monitorowania interfejsów API, narzędzia Trace lub dzienników dostępu NGINX, zgodnie z opisem w sekcji Typowe kroki diagnostyki.
    2. Wyszukaj identyfikator wiadomości w dzienniku procesora wiadomości:

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

    3. Znajdziesz tam wiersze z domeny system.log podobne do tych:

      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1 messageid:r-5110240-1
      NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context$3.onException() :
      ClientChannel[Connected: Remote:3.2.1.2:80 Local:192.168.205.251:44398]@20592
      useCount=1 bytesRead=0 bytesWritten=201 age=144ms  lastIO=0ms  isOpen=true.onExceptionRead
      exception: {}
      com.apigee.errors.http.server.BadGateway: response line size exceeding 2,048
      at <snipped>
      
      2021-07-26 06:45:41,451 org:myorg env:prod api:testtoobigline rev:1
      messageid:r-5110240-1  NIOThread@1 ERROR ADAPTORS.HTTP.FLOW -
      AbstractResponseListener.onException() : AbstractResponseListener.onError
      (HTTPResponse@6a5d6c33, response line size exceeding 2,048)
      

      Tekst message = response line size exceeding 2,048 w powyższym przykładzie oznacza, że rozmiar wiersza odpowiedzi przekracza 2 KB. Dlatego Apigee Edge zgłasza wyjątek i zwraca kod stanu 502 z z kodem błęduprotocol.http.TooBigline do aplikacji klienckich.

Rozdzielczość

Popraw rozmiar

Opcja nr 1 [zalecana]: popraw błąd aplikacji serwera docelowego lub serwera backendu, aby jej nie wysyłać wiersze odpowiedzi o rozmiarze większym niż dozwolony limit

  1. Przeanalizuj powód, dla którego dany klient wysłał wiersz odpowiedzi o większym rozmiarze niż dozwolony limit określony w sekcji Limity.
  2. Jeśli nie jest to pożądane, zmodyfikuj aplikację serwera docelowego/backendu tak, aby wysyła wiersz odpowiedzi o rozmiarze mniejszym niż dozwolony limit.
  3. Jeśli jest to pożądane i chcesz wysłać wiersz odpowiedzi o rozmiarze większym niż dozwolony limit, przejdź do następnych opcji.

CwC

Opcja 2. Użyj właściwości CwC, aby zwiększyć limit wiersza odpowiedzi

Apigee zapewnia CwC właściwość, która pozwala zwiększyć limit rozmiaru wiersza odpowiedzi. Więcej informacji: Ustaw limit wiersza odpowiedzi w procesorze wiadomości.

Limity

Apigee oczekuje, że aplikacja kliencka i serwer backendu nie będą wysyłać wierszy żądań/odpowiedzi których rozmiary są większe niż dozwolony limit określony dla Limitu wierszy żądania/odpowiedzi. w sekcji Apigee Edge Limits (Limity brzegowe Apigee).

  1. Jeśli jesteś użytkownikiem Public Cloud Cloud, maksymalny limit żądań i Rozmiar wiersza odpowiedzi jest zgodny z dokumentacją dla rozmiaru wiersza żądania/odpowiedzi w Limity Apigee.
  2. Jeśli jesteś użytkownikiem Private Cloud , możliwe, że domyślne maksimum zostało zmienione limitu rozmiaru żądania i wiersza odpowiedzi (mimo że nie jest to zalecane działanie). Maksymalny rozmiar wiersza 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.line.limit została zaktualizowana o nową wartość w procesorach wiadomości.

  1. Na komputerze z procesorem wiadomości wyszukaj właściwość HTTPResponse.line.limit w: /opt/apigee/edge-message-processor/conf i sprawdź w Zobacz, jaka wartość została ustawiona, jak pokazano poniżej:
    grep -ri "HTTPResponse.line.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.line.limit=2k
    
  3. Zwróć uwagę na to, że w przykładowych danych wyjściowych powyżej właściwość HTTPResponse.line.limit została ustawiona na wartość 2k w http.properties.

    Wskazuje on, że limit rozmiaru wiersza odpowiedzi skonfigurowany w Apigee dla prywatnego Chmura ma 2 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
  • Kompletne polecenie curl użyte do odtworzenia błędu 502
  • Plik śledzenia żądań do interfejsu API

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
  • 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