502 Nieprawidłowa brama – HeaderHeader

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.DuplicateHeader 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ć komunikat o błędzie podobny do tego poniżej:

{
   "fault":{
      "faultstring":"Duplicate Header \"Expires\"",
      "detail":{
         "errorcode":"protocol.http.DuplicateHeader"
      }
   }
}

Możliwe przyczyny

Ten błąd występuje, jeśli konkretny nagłówek HTTP nie może mieć duplikatów w Apigee Edge, występuje więcej niż raz z tymi samymi lub różnymi wartościami, w ramach odpowiedzi HTTP wysłanej przez z serwera backendu do Apigee Edge.

Zgodnie z RFC 7230, sekcja 3.2.2: kolejność pól, nadawca NIE MOŻE generować wielu nagłówków o tej samej nazwie pola w wiadomości, chyba że pole nagłówka jest zdefiniowane jako lista rozdzielana przecinkami [np. #(values)] lub pole nagłówka jest dobrze znany wyjątek. Jeśli Apigee Edge wykryje ten sam nagłówek, nie można ma duplikaty, są wysyłane więcej niż raz w odpowiedzi HTTP wysyłanej przez serwer docelowy/backend, następnie odpowiada, podając 502 Bad Gateway i kod błędu protocol.http.DuplicateHeader

Oto możliwe przyczyny tego błędu:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Zduplikowany nagłówek w odpowiedzi Odpowiedź z serwera backendu zawiera zduplikowane nagłówki. 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. Upewnij się, że filtr Serwer proxy jest ustawiony na Wszystkie.
  6. Porównaj Kod błędu z czasem.
  7. Wybierz komórkę, która ma kod błędu protocol.http.DuplicateHeader, jak pokazano poniżej:

    (wyświetl większy obraz)

  8. Informacje o kodzie błędu protocol.http.DuplicateHeader są wyświetlane w następujący sposób:

    (wyświetl większy obraz)

  9. Sprawdź, czy kod stanu to 502, jak w przykładzie powyżej.
  10. Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
  11. W oknie Logi zwróć uwagę na te informacje:

    • Kod stanu: 502
    • Źródło błędu: target
    • Kod błędu: protocol.http.DuplicateHeader.
  12. Źródło błędu to target, co oznacza, że odpowiedź z serwera backendu zawierała zduplikowane nagłówki.

Narzędzie śledzenia

Aby zdiagnozować błąd za pomocą narzędzia ś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, wywołaj interfejs API i odtwórz 502 Bad Gateway błąd
  2. Sprawdź, czy opcja Show all Flow Infos (Pokaż wszystkie informacje o przepływie) jest włączona:

  3. Wybierz jedno z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
  5. Błąd występuje zwykle w ramach procesu po żądaniu wysłania żądania do miejsca docelowego fazę serwera, jak poniżej:

    (wyświetl większy obraz)

  6. Zwróć uwagę na wartość błędu z śladu.

    Powyższy przykładowy log czasu pokazuje błąd jako Duplicate Header "Expires". Od Apigee zgłasza błąd po wysłaniu żądania do serwera backendu, co wskazuje że serwer backendu wysłał nagłówek Expires więcej niż raz.

  7. Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
  8. Przewiń stronę w dół do sekcji Phase Details – Response Headers (Szczegóły etapu – nagłówki odpowiedzi) i określ wartości X-Apigee-fault-code i X-Apigee-fault-source, jak pokazano poniżej:

    (wyświetl większy obraz)

  9. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source. jako protocol.http.DuplicateHeader i target, co oznacza, że ten błąd jest spowodowany tym, że serwer zaplecza przekazał zduplikowane nagłówki dla nagłówek odpowiedzi Expires.
    Nagłówki odpowiedzi Wartość
    X-Apigee-fault-code protocol.http.DuplicateHeader
    X-Apigee-fault-source target
  10. Sprawdź, czy używasz łańcuch serwerów proxy; czyli jeśli serwer docelowy lub docelowy punkt końcowy wywołuje inny serwer proxy w Apigee.

    1. Aby to sprawdzić, wróć do fazy Żądanie wysłane do serwera docelowego. Kliknij Pokaż skręt.

    2. Otworzy się okno Curl for Request Sent to Target Server (Adres URL żądania wysłanego do serwera docelowego), w którym możesz określić alias hosta serwera docelowego.

    3. Jeśli alias hosta serwera docelowego wskazuje alias hosta wirtualnego, jest to serwer proxy tworzyć łańcuchy. W takim przypadku musisz powtórzyć wszystkie powyższe kroki dla łańcucha proxy, aż sprawdzić, co tak naprawdę powoduje błąd 502 Bad Gateway.
    4. Jeśli alias hosta serwera docelowego wskazuje Twój serwer backendu, oznacza to, że serwer backendu wysyła zduplikowane nagłówki w odpowiedzi do Apigee.

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: ORG, ENV i PORT# są zastępowane przez wartości rzeczywiste.

  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.DuplicateHeader, a następnie określić wartość źródła 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- Kod błędu Apigee i X-Apigee-fault-source:

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

Przyczyna: w odpowiedzi zduplikowano nagłówek

Diagnostyka

  1. Określ kod błędu i źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API. Monitorowanie lub logi dostępu NGINX zgodnie z opisem w typowych krokach diagnostyki.
  2. Jeśli Źródło błędu ma wartość target, oznacza to, że odpowiedź wysłane przez serwer docelowy zawiera zduplikowane nagłówki.
  3. Możesz określić rzeczywisty nagłówek, który jest wysyłany więcej niż raz w ramach odpowiedzi korzystając z jednej z tych metod:

    Komunikat o błędzie

    Korzystanie z komunikatu o błędzie:

    1. Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z artykułem do: faultstring. Pole faultstring zawiera nazwę nagłówka, która wysłano więcej niż raz.

      Przykładowy komunikat o błędzie:

      "faultstring":"Duplicate Header \"Expires\""
      
    2. W powyższym komunikacie o błędzie widać, że wysłany został nagłówek Expires więcej niż raz, jak widać w faultstring.

    Rzeczywiste żądanie

    Na podstawie rzeczywistego żądania:

    1. Jeśli nie masz dostępu do rzeczywistego żądania wysłanego do serwera docelowego, odpowiednie polecenie curl z Używanie narzędzia Trace (krok 10.a) i kroku 10.b.
    2. Jeśli masz dostęp do rzeczywistego żądania wysłanego do docelowej aplikacji serwera, Następnie wykonaj te czynności:

      1. Nawiąż połączenie z serwerem docelowym.

        Przykładowe żądanie do serwera docelowego użytego w tym przykładzie:

        curl -X GET "https://BACKEND_SERVER_HOST/response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT" -v
        
      2. Sprawdź listę nagłówków widocznych w odpowiedzi.

        Przykładowa odpowiedź z serwera docelowego użytego w tym przykładzie:

        * ...Trimmed...
        > GET /response-headers?Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT&Expires=Mon%2C%2021%20June%202021%2007%3A28%3A00%20GMT HTTP/2
        > Host: BACKEND_SERVER_HOST
        > User-Agent: curl/7.64.1
        > Accept: */*
        >
        * Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
        < HTTP/2 200
        < date: Fri, 02 Jul 2021 05:29:07 GMT
        < content-type: application/json
        < content-length: 166
        < server: gunicorn/19.9.0
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < Expires: Mon, 21 June 2021 07:28:00 GMT
        < access-control-allow-origin: *
        < access-control-allow-credentials: true
        <
        ----<Response BODY>------
        * Connection #0 to host httpbin.org left intact
        * Closing connection 0
        

        W powyższym przykładowym żądaniu nagłówek Expires jest wysyłany częściej tylko raz. W związku z tym żądanie 502 Bad Gateway kończy się niepowodzeniem. i kod błędu: protocol.http.DuplicateHeader.

      3. Jeśli pojawi się nagłówek, którego nazwa znajduje się w faultstring więcej niż raz w odpowiedzi serwera backendu, to właśnie to jest przyczyną . W tym przypadku nagłówek Expires został wysłany więcej niż raz.

Rozdzielczość

Napraw duplikowanie

Opcja 1. [Zalecana opcja] Napraw serwer backendu, aby nie dołączać zduplikowanych nagłówków

  1. Przeanalizuj powód, dla którego dany serwer backendu wysyła zduplikowany nagłówek Expires i sprawdź, czy serwery proxy interfejsu API mogą to zaakceptować. W zgodnie ze specyfikacją HTTP w większości przypadków nie będzie pożądane RFC7230.
  2. Jeśli nie jest to pożądane, zmodyfikuj docelową aplikację serwera tak, aby nie wysyłała zduplikowanych nagłówków. W przykładzie omówionym powyżej można zauważyć, że wysłano nagłówek Expires dwukrotnie z tą samą wartością, co nie jest pożądane. Aby rozwiązać ten problem, sprawdź, że serwer docelowy przekazuje nagłówek Expires tylko raz.
  3. Jeśli to możliwe i chcesz zezwolić na zduplikowane nagłówki, otwórz Opcja 2. Korzystanie z usługi CCW.

CwC

Opcja 2. Korzystanie z usługi CCW

Apigee udostępnia właściwość CwC HTTPHeader.<HeaderName> ,która umożliwia aplikacje klienckie i cele serwery do wysyłania zduplikowanych nagłówków do serwerów proxy API w Apigee Edge.

Usługa konwersji w aplikacji Wartości
HTTPHeader.<HeaderName> allowDuplicates,multivalued

Na przykład następującą właściwość można ustawić w procesorach wiadomości, aby umożliwić dostęp do duplikatów i wiele wartości dla nagłówka Expires.

HTTPHeader.Expires=allowDuplicates, multiValued
  1. Jeśli jesteś użytkownikiem Private Cloud, możesz skonfigurować tę usługę tak, aby uniemożliwić Apigee korzystanie z usługi Apigee Krawędź z możliwością zgłaszania błędu 502 Bad Gateway, nawet jeśli żądanie zawiera powielonych nagłówków za pomocą . Przewodnik po konfigurowaniu procesorów wiadomości pod kątem używania zduplikowanych nagłówków.
  2. Jeśli jesteś użytkownikiem Public Cloud Cloud, skontaktuj się z zespołem pomocy Apigee Edge, aby skonfigurować tę usługę usługę w Twojej organizacji.

Specyfikacja

Apigee odpowiada odpowiedzią błędu 502 Bad Gateway, ponieważ oczekuje, że Serwer backendu działa zgodnie z poniższymi specyfikacjami RFC:

Specyfikacja
RFC 7230, sekcja 3.2.2: Field Order
RFC 7230, sekcja 3.2: pola nagłówka

Jeśli nadal potrzebujesz pomocy zespołu pomocy Apigee, wejdź na Musi zbierać informacje diagnostyczne.

Musi zbierać informacje diagnostyczne

Zbierz poniższe 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

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

  • Pełny komunikat o błędzie zaobserwowany dla nieudanych żądań
  • Nazwa środowiska
  • Pakiet serwerów proxy interfejsu API
  • Plik śledzenia żądań do interfejsu API
  • 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.

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