Servizio 503 non disponibile - Creazione del tunnel proxy non riuscita con 403

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP di 503 Service Unavailable con codice di errore protocol.http.ProxyTunnelCreationFailed come risposta per le chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 503 Service Unavailable

Potresti inoltre visualizzare il seguente messaggio di errore:

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

Proxy di inoltro e tunnelling

Apigee Edge consente ai proxy API di comunicare con il tuo server di backend attraverso un proxy server web, come spiegato in Configura il proxy di inoltro. Il server proxy apre una finestra di dialogo sicura (HTTPS) o non sicura Connessione (HTTP) al server di backend in base al tipo di proxy (indicato) dalla proprietà HTTPClient.proxy.type) utilizzata e trasferisce i dati in entrambe le direzioni. Questa operazione è nota come tunnel.

Per impostazione predefinita, Apigee Edge utilizza il tunneling per tutto il traffico. Per disattivare il tunneling, la proprietà HTTPClient.use.tunneling deve essere impostato su false.

Codice di errore: Protocol.http.ProxyTunnelCreationFailed

Apigee Edge restituisce il codice di errore protocol.http.ProxyTunnelCreationFailed se server proxy non è in grado di creare un tunnel tra Apigee Edge e il server di backend a causa di eventuali Problemi come firewall, restrizioni ACL (Access Control List), problemi DNS, server di backend indisponibilità, timeout e così via.

Il codice di stato nel faultstring della risposta da Apigee Edge in genere indica una possibile causa di alto livello che ha portato a questo errore.

Modello di stringa di errore:

Proxy refused to create tunnel with response status STATUS_CODE

Possibili cause per alcuni dei codici di stato osservati nella stringa di errore:

Nella tabella seguente vengono descritte le possibili cause in base al codice di stato indicato nella faultstring:

Stringa di errore Descrizione
Il proxy ha rifiutato di creare un tunnel con stato della risposta 403

403 - Forbidden

Ciò può accadere probabilmente a causa delle restrizioni del firewall o dell'ACL configurate nella di backend che impedisce la creazione di un tunnel.

Il proxy ha rifiutato di creare un tunnel con stato della risposta 503

503 - Service Unavailable

Ciò può accadere a causa di problemi del DNS, delle restrizioni del firewall, della configurazione indisponibilità che impedisce la creazione del tunnel

Il proxy ha rifiutato di creare un tunnel con stato della risposta 504

504 - Gateway Timeout

Questo può accadere in caso di timeout durante la creazione del tunnel

A seconda del codice di stato osservato in faultstring, devi utilizzare le tecniche più adatte per risolvere il problema. Questa guida pratica spiega come risolvere i problemi il problema se noti il codice di stato 403 nella faultstring per il codice di errore protocol.http.ProxyTunnelCreationFailed.

Possibili cause

Questo errore (codice di stato 403) si verifica se sono presenti firewall o ACL (Access Control List) alle restrizioni configurate sul server di backend che impediscono al tunnel di essere creato tra Apigee Edge e il server di backend dal server proxy.

Causa Descrizione Le istruzioni di risoluzione dei problemi applicabili a
Il proxy ha rifiutato di creare un tunnel con stato di risposta 403 Il server proxy si rifiuta di creare il tunnel quando riceve il nome host del server proxy anziché il nome host del server di backend nell'intestazione Host. Solo utenti Edge Private Cloud

Passaggi diagnostici comuni

Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:

Strumento Trace

Per diagnosticare l'errore utilizzando lo strumento Trace:

  1. Attiva la sessione di traccia e in uno dei seguenti modi:
      .
    • Attendi che si verifichi l'errore oppure
    • Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo. 503 Service Unavailable con Proxy refused to create tunnel with response status 403.
  2. Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
  5. In genere l'errore viene visualizzato al termine della fase Flusso di richiesta target avviato. come mostrato di seguito:

    Prendi in considerazione le seguenti informazioni:

    errore: Proxy refused to create tunnel with response status 403

  6. Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
  7. Scorri verso il basso fino alla sezione Intestazioni della risposta Dettagli sulla fase e determinano i valori di X-Apigee-fault-code e X-Apigee-fault-source come come mostrato di seguito:

    ( visualizza immagine ingrandita)

    ( visualizza immagine ingrandita)

  8. Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source. come protocol.http.ProxyTunnelCreationFailed e target , indicando che questo errore è causato dal tunnel proxy creazione non riuscita perché non è stata ricevuta l'intestazione host prevista.

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per determinare le informazioni chiave su HTTP 503 Service Unavailable errori.
  2. Controlla i log di accesso NGINX:

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

    Dove: ORG, ORG e PORT# sono sostituiti con valori effettivi.

  3. Cerca per vedere se ci sono errori 503 con codice di errore protocol.http.ProxyTunnelCreationFailed per un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non hanno ancora avuto esito positivo 503.
  4. Se riscontri 503 errori con il codice di errore X-Apigee corrispondente al valore di protocol.http.ProxyTunnelCreationFailed, quindi determinare il valore della X-Apigee-fault-source.

    Esempio di errore 503 nel log di accesso NGINX:

    La voce di esempio riportata sopra del log di accesso NGINX ha i seguenti valori per X- Codice di errore Apigee e fonte-fault-X-Apigee:

    Intestazioni della risposta Valore
    X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
    X-Apigee-fault-source target

Causa: il proxy ha rifiutato di creare un tunnel con stato di risposta 403

Diagnosi

  1. Determina il Codice errore e l'Origine errore per 503 Service Unavailable utilizzando lo strumento Trace o i log di accesso NGINX, come spiegato in Passaggi di diagnostica comuni.
  2. Esamina il messaggio di errore e determina il codice di stato indicato in faultstring per un errore durante la creazione del tunnel.
  3. In questo scenario, il codice di stato è 403, che significa Accesso negato.
  4. Ciò significa che i diritti o i privilegi non sono sufficienti per creare il tunnel. Questo potrebbe in genere si verificano in presenza di restrizioni firewall o ACL (Access Control List) che impediscono la creazione del tunnel.
  5. Esamina le eventuali restrizioni del firewall e/o ACL configurate sul server di backend che può impedire la creazione del tunnel.
  6. A seconda del tipo di firewall e/o delle restrizioni ACL, dovrai risolvere il problema in modo appropriato.
  7. Vediamo un esempio di limitazione del firewall per spiegare come risolvere il problema problema:

    Scenario: la limitazione del firewall sul server di backend prevede che l'intestazione host debba essere sempre contiene il nome host del server di backend

    Puoi utilizzare uno dei seguenti modi per determinare l'intestazione host passata da Apigee Edge:

    Trace

    Per determinare l'intestazione host utilizzando Trace:

    1. Accertarsi che faultstring contenga Proxy refused to create tunnel with response status 403 utilizzando la traccia come spiegato in Passaggi comuni per la diagnosi.
    2. Vai alla fase Flusso di richiesta target avviato ed esamina il Intestazioni delle richieste
    3. Verifica il valore del nome host specificato nell'intestazione Host nella sezione Intestazioni della richiesta.
    4. Se l'intestazione Host contiene il nome host proxy, si tratta del nome causa di questo errore.
    5. Il motivo è che il firewall è configurato sul server di backend in modo da accettare i Vengono richieste solo se l'intestazione host contiene il nome del server di backend.
    6. Quindi, quando il server proxy tenta di creare il tunnel con il server di backend, non riesce e restituisce l'errore

      Proxy refused to create tunnel with response status 403.

      Traccia di esempio che mostra l'intestazione host con un nome host proxy

      ( visualizza immagine ingrandita)

      Nella traccia di esempio mostrata sopra, mostra che l'intestazione host contiene il nome dell'host proxy www.proxyserver.com. Poiché esiste una limitazione del firewall configurata sul server di backend che prevede solo che deve essere contenuto nell' intestazione dell'host, verrà restituito errore Proxy refused to create tunnel with response status 403.

    tcpdump

    a determinare l'intestazione host utilizzando tcpdump.

    1. Acquisisci un tcpdump sul server proxy per le richieste provenienti da Componente Processore di messaggi di Apigee Edge con il seguente comando:

      tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
      

      Per ulteriori informazioni sull'uso del comando tcpdump, consulta tcpdump.

    2. Analizza i dati tcpdump utilizzando il comando strumento Wireshark o simile lo strumento a riga di comando gcloud.
    3. Di seguito è riportato un esempio di analisi tcpdump utilizzando Wireshark:

      ( visualizza immagine ingrandita)

    4. I numeri di pacchetto 13, 14 e 15 indicano che il campo Il processore sta connettendo il server proxy tramite un TCP a tre vie di handshake.
    5. Nel pacchetto 16, il processore di messaggi si è connesso all'host proxy httpbin.org (mostrato nell'esempio sopra).
    6. Seleziona il pacchetto 16 ed esamina il contenuto del pacchetto in dettaglio ed e nello specifico l'intestazione host che viene passata al server proxy dal messaggio Processore.

    7. L'esempio riportato sopra mostra l'intestazione dell'host httpin.org, che è il nome host del server proxy. Pertanto, quando il server proxy tenta di crea il tunnel con il server di backend passando l'intestazione host riportata sopra httpin.org, l'operazione non riesce e restituisce l'errore Proxy refused to create tunnel with response status 403.

Risoluzione

Scenario: la limitazione del firewall sul server proxy prevede che l'intestazione host debba contiene sempre il nome host del server di backend

Se hai appurato che questo errore è causato dal fatto che il firewall sul server di backend è configurato in modo tale che l'intestazione host debba contenere sempre un server di backend mentre il processore di messaggi invia il nome host del server proxy, esegui procedi nel seguente modo per risolvere il problema:

  1. Imposta la proprietà use.proxy.host.header.with.target.uri su true nel TargetEndpoint come mostrato nell'esempio seguente:

    Esempio di configurazione di 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>
    
  2. Assicurati che le altre proprietà relative a proxy di inoltro sono configurati nel processore di messaggi come segue:

    1. Esamina il file /opt/apigee/customer/application/message-processor.properties su ciascuno dei processori di messaggi.
    2. Assicurati che le seguenti proprietà siano impostate in base al tuo caso d'uso o ai tuoi requisiti:

      Valori di esempio per le proprietà:

      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
      

Raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli i seguenti dati informazioni diagnostiche e contattare l'assistenza Apigee Edge:

Se sei un utente di Private Cloud, fornisci le seguenti informazioni:

  • Messaggio di errore completo osservato per le richieste non riuscite
  • Nome ambiente
  • Bundle proxy API
  • File di traccia per le richieste API
  • Log di accesso NGINX

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

    Dove: ORG, ENV e PORT# sono sostituiti con valori effettivi.

  • Log di sistema del processore di messaggi

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

Riferimenti