503 Usługa jest niedostępna – nie udało się utworzyć tunelu proxy z błędem 403

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable z parametrem kod błędu protocol.http.ProxyTunnelCreationFailed jako odpowiedź na wywołania interfejsu API.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 503 Service Unavailable

Możesz też zobaczyć następujący komunikat o błędzie:

{
   "fault":{
      "faultstring":"Proxy refused to create tunnel with response status 403",
      "detail":{
         "errorcode":"protocol.http.ProxyTunnelCreationFailed"
      }
   }
}

Przekieruj serwer proxy i tunelowanie

Apigee Edge zezwala serwerom proxy interfejsu API na komunikację z serwerem backendu przez serwer proxy zgodnie z opisem na stronie Skonfiguruj serwer proxy przekierowania. Serwer proxy otwiera bezpieczny (HTTPS) lub niezabezpieczone (HTTP) z serwerem backendu w zależności od typu serwera proxy 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 wyłączyć tunelowanie, właściwość Pole HTTPClient.use.tunneling musi mieć wartość 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 problemy takie jak zapora sieciowa, ograniczenia ACL (listy kontroli dostępu), problemy z systemem DNS, serwer backendu niedostępność, przekroczenie limitu czasu itp.

Zwykle kod stanu w faultstring odpowiedzi z Apigee Edge wskazuje ogólną możliwą przyczynę tego błędu.

Szablon błędu:

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 poniższej tabeli opisano możliwe przyczyny w zależności od kodu stanu wskazanego w faultstring:

Ciąg złamania Opis
Serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 403

403 - Forbidden

Może to być spowodowane ograniczeniami zapory sieciowej lub list kontroli dostępu skonfigurowanymi w serwer backendu, który uniemożliwia utworzenie tunelu.

Serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 503

503 - Service Unavailable

Może to być spowodowane problemami z DNS, ograniczeniami zapory sieciowej, niedostępność, która uniemożliwia utworzenie tunelu

Serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 504

504 - Gateway Timeout

Może się tak zdarzyć, jeśli podczas tworzenia tunelu przekroczą czas oczekiwania

W zależności od kodu stanu zaobserwowanego w faultstring musisz użyć za pomocą odpowiednich metod, aby rozwiązać problem. Z tego poradnika dowiesz się, jak rozwiązać problemy problem, jeśli w tabeli faultstring widzisz kod stanu 403 dla kodu błędu protocol.http.ProxyTunnelCreationFailed.

Możliwe przyczyny

Ten błąd (kod stanu 403) występuje, jeśli istnieje zapora sieciowa lub lista kontroli dostępu (ACL) listy kontrolnej) skonfigurowanych na serwerze backendu, które uniemożliwiają uruchomienie tunelu utworzona 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 nazwę hosta serwera proxy zamiast nazwy hosta serwera backendu w nagłówku Host. Tylko użytkownicy Edge Private Cloud

Typowe kroki diagnostyki

Użyj jednego z tych narzędzi lub metod, aby zdiagnozować ten błąd:

Narzędzie śledzenia

Aby zdiagnozować błąd za pomocą narzędzia śledzenia:

  1. Włącz sesję śledzenia oraz albo:
    • poczekaj, aż wystąpi błąd, lub
    • Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby odtworzyć problem. 503 Service Unavailable z grupą Proxy refused to create tunnel with response status 403.
  2. Sprawdź, czy opcja Show all FlowInfos 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 pojawia się zwykle po etapie Rozpoczęto docelowy przepływ żądań jak poniżej:

    Uwaga:

    błąd: Proxy refused to create tunnel with response status 403

  6. Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
  7. Przewiń stronę w dół do sekcji Nagłówki odpowiedzi Szczegóły etapu. określ wartości X-Apigee-fault-code i X-Apigee-fault-source jako poniżej:

    ( wyświetl większy obraz)

    ( wyświetl większy obraz)

  8. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source jako protocol.http.ProxyTunnelCreationFailed i target , co oznacza, że ten błąd jest spowodowany tym, że tunel serwera proxy nie udało się utworzyć, 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:

  1. Jeśli jesteś użytkownikiem Private Cloud, możesz używać logów dostępu NGINX do: Określenie kluczowych informacji o protokole HTTP 503 Service Unavailable .
  2. Sprawdź logi dostępu NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    Gdzie: wartości ORG, ORG i PORT# są zastępowane rzeczywistymi wartościami.

  3. Wyszukaj błędy (503) z kodem błędu protocol.http.ProxyTunnelCreationFailed w konkretnym okresie (jeśli w przeszłości) lub jeśli jakieś żądania nadal kończą się niepowodzeniem 503
  4. Jeśli znajdziesz błędy 503 z kodem błędu X-Apigee-fault-code która pasuje do wartości protocol.http.ProxyTunnelCreationFailed, a następnie określ wartość źródła X-Apigee-fault-source..

    Przykładowy błąd 503 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.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Przyczyna: serwer proxy odmówił utworzenia tunelu ze stanem odpowiedzi 403

Diagnostyka

  1. Określ kod błędu i źródło błędu dla 503 Service Unavailable przy użyciu narzędzia Trace Tool lub logów dostępu NGINX, jak opisano w artykule Najczęstsze czynności diagnostyczne.
  2. Zapoznaj się z komunikatem o błędzie i określ kod stanu. wskazany w faultstring jako błąd podczas tworzenia tunelu.
  3. W tym scenariuszu kod stanu to 403, co oznacza Zabroniony.
  4. Oznacza to, że nie masz wystarczających uprawnień, aby utworzyć tunel. Może to spowodować zwykle występuje w przypadku ograniczeń zapory sieciowej lub listy kontroli dostępu (ACL), które uniemożliwia utworzenie tunelu.
  5. Sprawdź wszystkie ograniczenia zapory sieciowej i/lub listy kontroli dostępu skonfigurowane na serwerze backendu, może uniemożliwić utworzenie tunelu.
  6. W zależności od typu zapory sieciowej lub ograniczeń listy kontroli dostępu (ACL) musisz rozwiązać ten problem. w odpowiedni sposób.
  7. Przeanalizujmy przykładowe ograniczenie zapory sieciowej, aby wyjaśnić, jak rozwiązać ten problem. problem:

    Scenariusz: ograniczenie zapory sieciowej na serwerze backendu oczekuje, że nagłówek hosta powinien być zawsze zawierają nazwę hosta serwera backendu

    Nagłówek hosta przekazywany przez Apigee Edge możesz określić na jeden z tych sposobów:

    Śledzenie

    Aby określić nagłówek hosta za pomocą śledzenia:

    1. Upewnij się, że pole faultstring zawiera Proxy refused to create tunnel with response status 403, korzystając ze śledzenia, jak wyjaśniliśmy w tym artykule: Najczęstsze czynności diagnostyczne.
    2. Przejdź do etapu Target Request Przepływ uruchomiony i przejrzyj Nagłówki żądań
    3. Sprawdź wartość nazwy hosta podanej w polu Nagłówek hosta w polu Request Headers (Nagłówki żądań).
    4. Jeśli nagłówek Host zawiera nazwę hosta proxy, jest to wartość przyczynę tego błędu.
    5. Dzieje się tak, ponieważ zapora sieciowa jest skonfigurowana na serwerze backendu tak, aby akceptowała dyrektywę żądania tylko wtedy, gdy Nagłówek hosta zawiera nazwę serwera backendu.
    6. Gdy serwer proxy próbuje utworzyć tunel z serwerem backendu, kończy się niepowodzeniem i zostaje wyświetlony błąd

      Proxy refused to create tunnel with response status 403.

      Przykładowy log czasu pokazujący, że nagłówek hosta zawiera nazwę hosta serwera proxy

      ( wyświetl większy obraz)

      W przykładowym logu czasu powyżej widać, że Nagłówek hosta zawiera nazwa hosta proxy.www.proxyserver.com. Ponieważ ograniczenie zapory sieciowej skonfigurowane na serwerze backendu, które oczekuje wyłącznie nazwa hosta serwera backendu, która ma być zawarta w nagłówku hosta, otrzymasz wartość błąd Proxy refused to create tunnel with response status 403.

    tcpdump

    Aby określić nagłówek hosta za pomocą narzędzia tcpdump

    1. Przechwyć interfejs tcpdump na serwerze proxy dla żądań pochodzących z Komponent procesora wiadomości 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 sekcji tcpdump.

    2. Analizuj dane typu tcpdump, korzystając z Wireshark lub podobnego narzędzia. .
    3. Oto przykładowa analiza tcpdump za pomocą programu Wireshark:

      ( wyświetl większy obraz)

    4. Numery 13, 14 i 15 wskazują, że wiadomość Procesor nawiązuje połączenie z serwerem proxy za pomocą trójkierunkowego protokołu TCP procesu uzgadniania połączenia.
    5. W pakiecie 16 procesor wiadomości połączył się z hostem serwera proxy httpbin.org (widoczne w przykładzie powyżej).
    6. Wybierz pakiet 16 i dokładnie przeanalizuj jego zawartość oraz zwłaszcza nagłówek hosta przekazywany do serwera proxy przez komponent Message Procesor.

    7. W przykładzie powyżej widać nagłówek hosta httpin.org, który to nazwa hosta serwera proxy. Dlatego gdy serwer proxy próbuje utwórz tunel z serwerem backendu, przekazując powyższy nagłówek hosta httpin.org kończy się błędem Proxy refused to create tunnel with response status 403.

Rozdzielczość

Scenariusz: ograniczenie zapory sieciowej na serwerze proxy oczekuje, że nagłówek hosta powinien zawsze zawierają nazwę hosta serwera backendu

Jeśli wiesz, że ten błąd jest spowodowany tym, że zapora sieciowa na serwerze backendu skonfigurowano w taki sposób, że element Nagłówek hosta powinien zawsze zawierać serwer backend. podczas gdy procesor wiadomości wysyła nazwę hosta serwera proxy, a następnie wykonaj wykonaj te czynności, by rozwiązać problem:

  1. Ustaw właściwość use.proxy.host.header.with.target.uri na „true” w Docelowy punkt końcowy jak w tym przykładzie:

    Przykładowa konfiguracja docelowego punktu końcowego:

    <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>
    
  2. Upewnij się, że pozostałe właściwości powiązane z zapytaniem proxy przekierowania są skonfigurowane w procesorze wiadomości w ten sposób:

    1. Sprawdź plik /opt/apigee/customer/application/message-processor.properties na każdym z procesorów wiadomości.
    2. 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
      

Musi zbierać informacje diagnostyczne

Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na informacje diagnostyczne, a następnie skontaktuj się z zespołem pomocy Apigee Edge:

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

  • Logi systemowe procesora wiadomości

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

Pliki referencyjne