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 503 Service Unavailable
z kodem błędu protocol.http.ProxyTunnelCreationFailed
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 503 Service Unavailable
Oprócz tego może pojawić się ten komunikat o błędzie:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Przekierowywanie serwera proxy i tunelowanie
Apigee Edge zezwala serwerom proxy interfejsów API na komunikowanie się z serwerem backendu przez serwer proxy zgodnie z opisem w sekcji
Konfigurowanie serwera proxy przekierowania. Serwer proxy nawiązuje bezpieczne (HTTPS) lub niezabezpieczone (HTTP) połączenie z serwerem backendu w zależności od używanego typu serwera proxy (wskazany przez usługę HTTPClient.proxy.type
) i przesyła dane w obu kierunkach. Jest to tzw. tunelowanie.
Domyślnie Apigee Edge używa tunelowania dla całego ruchu. Aby można było wyłączyć tunelowanie, właściwość HTTPClient.use.tunneling
musi być ustawiona na false
.
Kod błędu: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge zwraca kod błędu protocol.http.ProxyTunnelCreationFailed
, jeśli serwer proxy nie może utworzyć tunelu między Apigee Edge a serwerem backendu z powodu problemów takich jak zapora sieciowa, ograniczenia listy kontroli dostępu (ACL), problemy z DNS, niedostępność serwera backendu, przekroczenie czasu oczekiwania itp.
Kod stanu w faultstring
odpowiedzi z Apigee Edge zwykle wskazuje możliwą dużą przyczynę tego błędu.
Szablon z błędami:
Proxy refused to create tunnel with response status STATUS_CODE
Możliwe przyczyny niektórych kodów stanu zaobserwowanych w ciągu błędów:
W tabeli poniżej opisujemy możliwe przyczyny zależne od kodu stanu wskazanego w faultstring
:
Ciąg znaków | Opis |
---|---|
Serwer proxy odmówił utworzenia tunelu o stanie odpowiedzi 403 |
Może się tak zdarzyć ze względu na ograniczenia zapory sieciowej lub listy kontroli dostępu skonfigurowane na serwerze backendu, które uniemożliwiają utworzenie tunelu. |
Serwer proxy odmówił utworzenia tunelu o stanie odpowiedzi 503 |
Może to być spowodowane problemami z DNS, ograniczeniami zapory sieciowej, niedostępnością serwera backendu, która uniemożliwia utworzenie tunelu. |
Serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 504 |
Może się tak zdarzyć, jeśli podczas tworzenia tunelu nastąpiły przekroczenie czasu oczekiwania. |
W zależności od kodu stanu zaobserwowanego w faultstring
musisz użyć odpowiednich technik, aby rozwiązać problem. Ten poradnik wyjaśnia, jak rozwiązać ten problem, jeśli widzisz kod stanu 403
w faultstring
kodu błędu protocol.http.ProxyTunnelCreationFailed
.
Możliwe przyczyny
Ten błąd (kod stanu 403
) występuje, jeśli na serwerze backendu są skonfigurowane ograniczenia zapory sieciowej lub listy kontroli dostępu (ACL), które uniemożliwiają utworzenie tunelu między Apigee Edge a serwerem backendu przez serwer proxy.
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 403 | Serwer proxy odmawia utworzenia tunelu, ponieważ otrzymuje w nagłówku Host nazwę hosta serwera proxy zamiast nazwy hosta serwera backendu. |
Tylko użytkownicy chmury Edge Private Cloud |
Najczęstsze kroki diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Narzędzie do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz sesję śledzenia, a potem:
- Poczekaj na wystąpienie błędu lub
- Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby odtworzyć problem
503 Service Unavailable
zProxy refused to create tunnel with response status 403
.
Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Błąd pojawia się zwykle po fazie rozpoczęcia przepływu żądania docelowego, jak pokazano poniżej:
Uwaga:
błąd:
Proxy refused to create tunnel with response status 403
- Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
Przewiń w dół do sekcji Szczegóły fazy Nagłówki odpowiedzi i ustal wartości X-Apigee-fault-code oraz X-Apigee-fault-source, jak pokazano poniżej:
Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source odpowiednio jako
protocol.http.ProxyTunnelCreationFailed
itarget
, wskazując, że ten błąd jest spowodowany niepowodzeniem tworzenia tunelu proxy, ponieważ nie otrzymano oczekiwanego nagłówka hosta.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
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ślania kluczowych informacji o błędach HTTP
503 Service Unavailable
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Gdzie: ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w danym okresie wystąpiły jakieś błędy
503
z kodem błęduprotocol.http.ProxyTunnelCreationFailed
(jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z503
. Jeśli znajdziesz jakieś
503
błędy w kodzie 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 503 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-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Przyczyna: odmowa utworzenia tunelu przez serwer proxy ze stanem odpowiedzi 403
Diagnostyka
- Określ kod błędu i źródło błędu dla usługi
503 Service Unavailable
za pomocą narzędzia do śledzenia lub dzienników dostępu NGINX zgodnie z opisem w częstych krokach diagnostyki. - Przeczytaj komunikat o błędzie i ustal kod stanu wskazany w
faultstring
dla niepowodzenia utworzenia tunelu. - W tym przypadku kod stanu to
403
, co oznacza Forbidden (Zabroniony). - Oznacza to, że nie masz wystarczających uprawnień lub uprawnień do utworzenia tunelu. Zwykle może tak się zdarzyć, jeśli istnieją ograniczenia zapory sieciowej lub listy kontroli dostępu (ACL), które uniemożliwiają utworzenie tunelu.
- Sprawdź ograniczenia zapory sieciowej i/lub listy kontroli dostępu skonfigurowane na serwerze backendu, które mogą uniemożliwić utworzenie tunelu.
- W zależności od typu zapory sieciowej lub ograniczeń listy kontroli dostępu (ACL) trzeba odpowiednio rozwiązać problem.
Przeanalizujmy przykładowe ograniczenie zapory sieciowej, aby wyjaśnić, jak rozwiązać ten problem:
Scenariusz: ograniczenie zapory sieciowej na serwerze backendu wymaga, aby nagłówek hosta zawsze zawierał nazwę hosta serwera backendu
Możesz użyć jednego z tych sposobów, aby określić nagłówek hosta przekazywany przez Apigee Edge:
Trace
Aby określić nagłówek hosta przy użyciu logu czasu:
- Sprawdź, czy
faultstring
zawieraProxy refused to create tunnel with response status 403
, korzystając ze śledzenia, zgodnie z opisem w częstych krokach diagnostyki. - Przejdź do etapu Rozpoczęcie przepływu żądań docelowych i sprawdź Nagłówki żądań
- Sprawdź wartość nazwy hosta podanej w nagłówku hosta w sekcji Nagłówki żądań.
- Jeśli nagłówek Host zawiera nazwę hosta serwera proxy, to jest przyczyną tego błędu.
- Dzieje się tak, ponieważ zapora sieciowa na serwerze backendu jest skonfigurowana tak, aby akceptowała żądania tylko wtedy, gdy Nagłówek hosta zawiera nazwę serwera backendu.
- Jeśli więc serwer proxy próbuje utworzyć tunel z serwerem backendu, kończy się niepowodzeniem i wyświetlany jest błąd.
Proxy refused to create tunnel with response status 403
.Przykładowy zrzut ekranu pokazujący nagłówek hosta z nazwą hosta serwera proxy
W przykładowym logu czasu pokazanym powyżej pokazuje, że nagłówek hosta zawiera nazwę hosta serwera proxy.
www.proxyserver.com.
Na serwerze backendu skonfigurowane jest ograniczenie zapory sieciowej, które wymaga umieszczenia w nagłówku hosta tylko nazwy hosta serwera backendu, pojawia się błądProxy refused to create tunnel with response status 403
.
tcpdump
Aby określić nagłówek hosta za pomocą narzędzia tcpdump
Przechwyć na serwerze proxy
tcpdump
dla żądań przychodzących z komponentu Message Processor w Apigee Edge za pomocą tego polecenia:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Więcej informacji o używaniu polecenia
tcpdump
znajdziesz w tcpdump.- Przeanalizuj dane
tcpdump
za pomocą narzędzia Wireshark lub podobnego. Oto przykładowa analiza narzędzia tcpdump z użyciem Wireshark:
- Numery pakietów 13, 14 i 15 wskazują, że procesor wiadomości nawiązuje połączenie z serwerem proxy w ramach trójkierunkowego procesu uzgadniania połączenia TCP.
- W pakiecie 16 procesor wiadomości połączył się z hostem proxy
httpbin.org
(jak pokazano w przykładzie powyżej). Wybierz pakiet 16 i sprawdź dokładnie zawartość pakietu, a w szczególności nagłówek hosta przekazywany do serwera proxy przez procesor wiadomości.
- W przykładzie powyżej widać Nagłówek hosta
httpin.org
, który jest nazwą hosta serwera proxy. Dlatego gdy serwer proxy próbuje utworzyć tunel z serwerem backendu, przekazując wspomniany wyżej nagłówek hostahttpin.org
, kończy się niepowodzeniem i wyświetlany jest błądProxy refused to create tunnel with response status 403
.
- Sprawdź, czy
Rozdzielczość
Scenariusz: ograniczenie zapory sieciowej na serwerze proxy wymaga, aby nagłówek hosta zawsze zawierał nazwę hosta serwera backendu
Jeśli masz pewność, że ten błąd jest spowodowany tym, że zapora sieciowa na serwerze backendu jest skonfigurowana w taki sposób, że zgodnie z oczekiwaniami Nagłówek hosta powinien zawsze zawierać nazwę hosta serwera backend, a procesor wiadomości wysyła nazwę hosta backend, wykonaj te czynności, aby rozwiązać ten problem:
Ustaw właściwość
use.proxy.host.header.with.target.uri
na wartość true w elemencie TargetEndpoint zgodnie z tym przykładem:Przykładowa konfiguracja punktu końcowego docelowego:
<TargetEndpoint name="default"> <HTTPTargetConnection> <URL>https://mocktarget.apigee.net/json</URL> <Properties> <Property name="use.proxy.host.header.with.target.uri">true</Property> </Properties> </HTTPTargetConnection> </TargetEndpoint>
Sprawdź, czy pozostałe właściwości związane z serwerem proxy przekierowania są skonfigurowane w procesorze wiadomości w ten sposób:
- Sprawdź plik
/opt/apigee/customer/application/message-processor.properties
na każdym procesorze wiadomości. Upewnij się, że te właściwości są ustawione zgodnie z Twoim przypadkiem użycia lub wymaganiami:
Przykładowe wartości właściwości:
conf_http_HTTPClient.use.proxy=true conf/http.properties+HTTPClient.proxy.type=HTTP conf/http.properties+HTTPClient.proxy.host=PROXY_SERVER_HOST_NAME conf/http.properties+HTTPClient.proxy.port=PORT_# conf/http.properties+HTTPClient.proxy.user=USERNAME conf/http.properties+HTTPClient.proxy.password=PASSWORD
- Sprawdź plik
Musisz zebrać informacje diagnostyczne
Jeśli problem nie ustąpi mimo wykonania powyższych instrukcji, zbierz poniższe informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowany pełny komunikat o błędzie dotyczący nieudanych żądań
- Nazwa środowiska
- Pakiet proxy interfejsu API
- Plik śledzenia żądań 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 rzeczywistymi wartościami.
Dzienniki systemowe procesora wiadomości
/opt/apigee/var/log/edge-message-processor/logs/system.log