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

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

403 - Forbidden

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

503 - Service Unavailable

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

504 - Gateway Timeout

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:

  1. 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 z Proxy refused to create tunnel with response status 403.
  2. Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:

  3. Wybierz 1 z nieudanych żądań i sprawdź log czasu.
  4. Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
  5. 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

  6. Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
  7. 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:

    ( wyświetl większy obraz)

    ( wyświetl większy obraz)

  8. Zobaczysz wartości X-Apigee-fault-code i X-Apigee-fault-source odpowiednio jako protocol.http.ProxyTunnelCreationFailed i target , 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:

  1. 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.
  2. 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.

  3. Sprawdź, czy w danym okresie wystąpiły jakieś błędy 503 z kodem błędu protocol.http.ProxyTunnelCreationFailed (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z 503.
  4. 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

  1. 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.
  2. Przeczytaj komunikat o błędzie i ustal kod stanu wskazany w faultstring dla niepowodzenia utworzenia tunelu.
  3. W tym przypadku kod stanu to 403, co oznacza Forbidden (Zabroniony).
  4. 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.
  5. Sprawdź ograniczenia zapory sieciowej i/lub listy kontroli dostępu skonfigurowane na serwerze backendu, które mogą uniemożliwić utworzenie tunelu.
  6. W zależności od typu zapory sieciowej lub ograniczeń listy kontroli dostępu (ACL) trzeba odpowiednio rozwiązać problem.
  7. 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:

    1. Sprawdź, czy faultstring zawiera Proxy refused to create tunnel with response status 403, korzystając ze śledzenia, zgodnie z opisem w częstych krokach diagnostyki.
    2. Przejdź do etapu Rozpoczęcie przepływu żądań docelowych i sprawdź Nagłówki żądań
    3. Sprawdź wartość nazwy hosta podanej w nagłówku hosta w sekcji Nagłówki żądań.
    4. Jeśli nagłówek Host zawiera nazwę hosta serwera proxy, to jest przyczyną tego błędu.
    5. 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.
    6. 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

      ( wyświetl większy obraz)

      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łąd Proxy refused to create tunnel with response status 403.

    tcpdump

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

    1. 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.

    2. Przeanalizuj dane tcpdump za pomocą narzędzia Wireshark lub podobnego.
    3. Oto przykładowa analiza narzędzia tcpdump z użyciem Wireshark:

      ( wyświetl większy obraz)

    4. 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.
    5. W pakiecie 16 procesor wiadomości połączył się z hostem proxy httpbin.org (jak pokazano w przykładzie powyżej).
    6. 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.

    7. 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 hosta httpin.org, kończy się niepowodzeniem i wyświetlany jest błąd Proxy refused to create tunnel with response status 403.

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:

  1. 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>
    
  2. Sprawdź, czy pozostałe właściwości związane z serwerem 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 procesorze 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
      

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
    

Odniesienia