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:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z uprawnieniami odpowiednią rolę.
Przełącz się na organizację, w której chcesz zbadać problem.
- Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
- Wybierz okres, w którym zaobserwowano błędy.
- Upewnij się, że filtr Serwer proxy jest ustawiony na Wszystkie.
- Porównaj Kod błędu z czasem.
Wybierz komórkę, która ma kod błędu
protocol.http.DuplicateHeader
, jak pokazano poniżej:Informacje o kodzie błędu
protocol.http.DuplicateHeader
są wyświetlane w następujący sposób:- Sprawdź, czy kod stanu to
502
, jak w przykładzie powyżej. - Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
W oknie Logi zwróć uwagę na te informacje:
- Kod stanu:
502
- Źródło błędu:
target
- Kod błędu:
protocol.http.DuplicateHeader
.
- Kod stanu:
- Ź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:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu
502 Bad Gateway
lub - Jeśli możesz odtworzyć problem, wywołaj interfejs API i odtwórz
502 Bad Gateway
błąd
- Poczekaj na wystąpienie błędu
Sprawdź, czy opcja Show all Flow Infos (Pokaż wszystkie informacje o przepływie) jest włączona:
- Wybierz jedno z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
Błąd występuje zwykle w ramach procesu po żądaniu wysłania żądania do miejsca docelowego fazę serwera, jak poniżej:
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łówekExpires
więcej niż raz.- Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
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:
- Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source.
jako
protocol.http.DuplicateHeader
itarget
, co oznacza, że ten błąd jest spowodowany tym, że serwer zaplecza przekazał zduplikowane nagłówki dla nagłówek odpowiedziExpires
.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.DuplicateHeader
X-Apigee-fault-source target
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.
Aby to sprawdzić, wróć do fazy Żądanie wysłane do serwera docelowego. Kliknij Pokaż skręt.
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.
- 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
. - 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:
- 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
. 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.
- 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ę niepowodzeniem502
Jeśli znajdziesz błędy
502
z kodem błędu X-Apigee-fault-code pasujące do wartościprotocol.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
- 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.
- Jeśli Źródło błędu ma wartość
target
, oznacza to, że odpowiedź wysłane przez serwer docelowy zawiera zduplikowane nagłówki. 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:
Jeśli masz dostęp do pełnego komunikatu o błędzie otrzymanego z Apigee Edge, zapoznaj się z artykułem do:
faultstring
. Polefaultstring
zawiera nazwę nagłówka, która wysłano więcej niż raz.Przykładowy komunikat o błędzie:
"faultstring":"Duplicate Header \"Expires\""
- W powyższym komunikacie o błędzie widać, że wysłany został nagłówek
Expires
więcej niż raz, jak widać wfaultstring
.
Rzeczywiste żądanie
Na podstawie rzeczywistego żądania:
- 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. Jeśli masz dostęp do rzeczywistego żądania wysłanego do docelowej aplikacji serwera, Następnie wykonaj te czynności:
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
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 żądanie502 Bad Gateway
kończy się niepowodzeniem. i kod błędu:protocol.http.DuplicateHeader
.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łówekExpires
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
- 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. - 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łówekExpires
tylko raz. - 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
- 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. - 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łędu502
- 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