Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable z kodem błędu protocol.http.ProxyTunnelCreationFailed w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 503 Service Unavailable
Może też pojawić się ten komunikat o błędzie:
{
"fault":{
"faultstring":"Proxy refused to create tunnel with response status 403",
"detail":{
"errorcode":"protocol.http.ProxyTunnelCreationFailed"
}
}
}Serwer proxy przekierowania i tunelowanie
Apigee Edge umożliwia proxy interfejsu API komunikowanie się z serwerem backendu za pomocą serwera proxy
, jak opisano w
artykule Konfigurowanie serwera proxy przekierowania. Serwer proxy otwiera bezpieczne (HTTPS) lub niezabezpieczone
(HTTP) połączenie z serwerem backendu w zależności od typu serwera proxy (wskazywanego
przez właściwość HTTPClient.proxy.type) używanego i przesyła dane
w obu kierunkach. Nazywamy to tunelowaniem.
Domyślnie Apigee Edge używa tunelowania w przypadku całego ruchu. Aby wyłączyć tunelowanie, właściwość
HTTPClient.use.tunneling należy ustawić 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 limitu czasu itp.
Kod stanu w faultstring odpowiedzi z Apigee Edge zwykle
wskazuje możliwą przyczynę wyższego poziomu, która doprowadziła do tego błędu.
Szablon faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
Możliwe przyczyny niektórych kodów stanu obserwowanych w faultstring:
W tabeli poniżej opisano możliwe przyczyny w zależności od kodu stanu wskazanego w
faultstring:
| Faultstring | Opis |
|---|---|
Proxy refused to create tunnel with response status 403 |
Może to być spowodowane ograniczeniami zapory sieciowej lub listy ACL skonfigurowanymi na serwerze backendu, które uniemożliwiają utworzenie tunelu. |
Proxy refused to create tunnel with response status 503 |
Może to być spowodowane problemami z DNS, ograniczeniami zapory sieciowej lub niedostępnością serwera backendu, które uniemożliwiają utworzenie tunelu. |
| Proxy refused to create tunnel with response status 504 |
Może się tak zdarzyć, jeśli podczas tworzenia tunelu wystąpią przekroczenia limitu czasu. |
W zależności od kodu stanu obserwowanego w faultstring musisz użyć
odpowiednich metod rozwiązywania problemu. Ten przewodnik wyjaśnia, jak rozwiązać problem, jeśli w faultstring dla kodu błędu protocol.http.ProxyTunnelCreationFailed występuje kod stanu 403 .
Możliwe przyczyny
Ten błąd (kod stanu 403) występuje, jeśli na serwerze backendu są skonfigurowane ograniczenia zapory sieciowej lub listy ACL (Access
Control List), które uniemożliwiają serwerowi proxy utworzenie tunelu między Apigee Edge a serwerem backendu.
| Przyczyna | Opis | Instrukcje rozwiązywania problemów, które mają zastosowanie do |
|---|---|---|
| Proxy refused to create tunnel with response status 403 | Serwer proxy odmawia utworzenia tunelu, ponieważ w nagłówku Host otrzymuje nazwę hosta serwera proxy
zamiast nazwy hosta serwera backendu. |
Tylko użytkownicy Edge Private Cloud |
Typowe czynności diagnostyczne
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Narzędzie Trace
Aby zdiagnozować błąd za pomocą narzędzia Trace:
- Włącz sesję śledzenia i
wykonaj jedną z tych czynności:
- Poczekaj na wystąpienie błędu.
- Jeśli możesz odtworzyć problem, wywołaj interfejs API, aby odtworzyć błąd
503 Service UnavailablezProxy refused to create tunnel with response status 403.
Sprawdź, czy jest włączona opcja Pokaż wszystkie informacje o przepływach:
- Wybierz jedno z nieudanych żądań i sprawdź ślad.
- Przejdź przez różne etapy śledzenia i znajdź miejsce, w którym wystąpił błąd.
Błąd zobaczysz zwykle po etapie Target Request Flow Started (Rozpoczęcie przepływu żądania do celu), jak pokazano poniżej:
Zanotuj te informacje:
error:
Proxy refused to create tunnel with response status 403- W śladzie otwórz etap AX (Zapisane dane analityczne) i kliknij go.
Przewiń w dół do sekcji Phase Details (Szczegóły etapu) Response Headers (Nagłówki odpowiedzi) i określ wartości X-Apigee-fault-code i X-Apigee-fault-source , jak pokazano poniżej:
Wartości X-Apigee-fault-code i X-Apigee-fault-source to odpowiednio
protocol.http.ProxyTunnelCreationFaileditarget, co oznacza, że ten błąd jest spowodowany nieudanym utworzeniem tunelu proxy , ponieważ nie otrzymano oczekiwanego nagłówka hosta.Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
Aby zdiagnozować błąd za pomocą logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX, aby
określić kluczowe informacje o błędach HTTP
503 Service Unavailable. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logGdzie: ORG, ORG, i PORT# są zastępowane rzeczywistymi wartościami.
- Sprawdź, czy w określonym czasie (jeśli problem wystąpił w przeszłości) występują błędy
503z kodem błęduprotocol.http.ProxyTunnelCreationFailedlub czy nadal występują żądania, które kończą się niepowodzeniem z kodem503. Jeśli znajdziesz błędy
503z X-Apigee-fault-code o wartościprotocol.http.ProxyTunnelCreationFailed, określ wartość X-Apigee-fault-source.Przykładowy błąd 503 z logu dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma te wartości X- Apigee-fault-code i X-Apigee-fault-source:
Nagłówki odpowiedzi Wartość X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
Przyczyna: Proxy refused to create tunnel with response status 403
Diagnostyka
- Określ kod błędu i źródło błędu dla
503 Service Unavailableza pomocą narzędzia Trace lub logów dostępu NGINX, jak opisano w sekcji Typowe czynności diagnostyczne. - Sprawdź komunikat o błędzie i określ kod stanu
wskazany w
faultstringw przypadku niepowodzenia utworzenia tunelu. - W tym przypadku kod stanu to
403, co oznacza Dostęp zabroniony. - Oznacza to, że nie masz wystarczających praw ani uprawnień do utworzenia tunelu. Zwykle może się tak zdarzyć, jeśli istnieją ograniczenia zapory sieciowej lub listy kontroli dostępu (ACL), które uniemożliwiają utworzenie tunelu.
- Sprawdź ograniczenia zapory sieciowej lub listy ACL skonfigurowane na serwerze backendu, które mogą uniemożliwiać utworzenie tunelu.
- W zależności od typu zapory sieciowej lub ograniczeń listy ACL musisz odpowiednio rozwiązać problem.
Aby wyjaśnić, jak rozwiązać ten problem, weźmy na przykład ograniczenie zapory sieciowej:
Scenariusz: ograniczenie zapory sieciowej na serwerze backendu wymaga, aby nagłówek Host zawsze zawierał nazwę hosta serwera backendu
Aby określić nagłówek Host przekazywany przez Apigee Edge, możesz użyć jednej z tych metod:
Śledzenie
Aby określić nagłówek Host za pomocą śledzenia:
- Upewnij się, że
faultstringzawieraProxy refused to create tunnel with response status 403za pomocą śledzenia, jak opisano w Typowe czynności diagnostyczne. - Otwórz etap Target Request Flow Started (Rozpoczęcie przepływu żądania do celu) i sprawdź Request Headers(Nagłówki żądania).
- Sprawdź wartość nazwy hosta podaną w nagłówku Host w sekcji Request Headers (Nagłówki żądania).
- Jeśli nagłówek Host zawiera nazwę hosta serwera proxy, jest to przyczyna tego błędu.
- Dzieje się tak, ponieważ zapora sieciowa jest skonfigurowana na serwerze backendu tak, aby akceptować żądania tylko wtedy, gdy nagłówek Host zawiera nazwę serwera backendu.
- Gdy serwer proxy próbuje utworzyć tunel z serwerem backendu, kończy się to niepowodzeniem z powodu błędu
Proxy refused to create tunnel with response status 403.Przykładowy ślad pokazujący nagłówek Host z nazwą hosta serwera proxy
W powyższym przykładowym śladzie widać, że nagłówek Host zawiera nazwę hosta serwera proxy
www.proxyserver.com.Ponieważ na serwerze backendu jest skonfigurowane ograniczenie zapory sieciowej, które wymaga, aby nagłówek Host zawierał tylko nazwę hosta serwera backendu, występuje błądProxy refused to create tunnel with response status 403.
tcpdump
Aby określić nagłówek Host za pomocą tcpdump:
Przechwyć
tcpdumpna serwerze proxy w przypadku żądań pochodzących z komponentu procesora komunikató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
tcpdumpznajdziesz w artykule tcpdump.- Przeanalizuj dane
tcpdumpza pomocą narzędzia Wireshark lub podobnego narzędzia. Oto przykładowa analiza `tcpdump` za pomocą Wireshark:
- Numery pakietów 13, 14 i 15 wskazują, że procesor wiadomości nawiązuje połączenie z serwerem proxy za pomocą trójstronnego uzgadniania TCP.
- W pakiecie 16 procesor komunikatów połączył się z hostem serwera proxy
httpbin.org(pokazanym w przykładzie powyżej). Wybierz pakiet 16 i szczegółowo sprawdź jego zawartość, a zwłaszcza nagłówek Host przekazywany do serwera proxy przez procesor wiadomości.
- W powyższym przykładzie widać nagłówek Host
httpin.org, który jest nazwą hosta serwera proxy. Gdy serwer proxy próbuje utworzyć tunel z serwerem backendu, przekazując powyższy nagłówek Hosthttpin.org, kończy się to niepowodzeniem z powodu błęduProxy refused to create tunnel with response status 403.
- Upewnij się, że
Rozwiązanie
Scenariusz: ograniczenie zapory sieciowej na serwerze proxy wymaga, aby nagłówek Host zawsze zawierał nazwę hosta serwera backendu
Jeśli stwierdzisz, że ten błąd jest spowodowany tym, że zapora sieciowa na serwerze backendu jest skonfigurowana tak, aby wymagała, aby nagłówek Host zawsze zawierał nazwę hosta serwera backendu, a procesor komunikatów wysyła nazwę hosta serwera proxy, wykonaj te czynności, aby rozwiązać problem:
Ustaw właściwość
use.proxy.host.header.with.target.urina true w TargetEndpoint, jak pokazano w tym przykładzie:Przykładowa konfiguracja TargetEndpoint:
<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>Upewnij się, że inne właściwości związane z serwerem proxy przekierowania są skonfigurowane w procesorze komunikatów w ten sposób:
- Sprawdź plik
/opt/apigee/customer/application/message-processor.propertiesna 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
Informacje diagnostyczne, które musisz zebrać
Jeśli problem będzie nadal występował nawet po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:
Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Pełny komunikat o błędzie obserwowany w przypadku nieudanych żądań.
- Nazwa środowiska.
- Pakiet proxy interfejsu API.
- Plik śledzenia żądań do interfejsu API.
Logi dostępu NGINX.
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logGdzie: ORG, ENV i PORT# są zastępowane rzeczywistymi wartościami.
Logi systemowe procesora komunikatów.
/opt/apigee/var/log/edge-message-processor/logs/system.log