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 |
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 |
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 |
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:
- 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
conProxy refused to create tunnel with response status 403
.
Assicurati che l'opzione Mostra tutte le informazioni di Flow sia attivata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Navigare attraverso le diverse fasi della traccia e individuare il punto in cui si è verificato l'errore si è verificato un errore.
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
- Vai alla fase AX (dati registrati di Analytics) della traccia e fai clic su quest'ultima.
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:
Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source. come
protocol.http.ProxyTunnelCreationFailed
etarget
, 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:
- Se sei un utente Private Cloud, puoi utilizzare i log di accesso NGINX per
determinare le informazioni chiave su HTTP
503 Service Unavailable
errori. 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.
- Cerca per vedere se ci sono errori
503
con codice di erroreprotocol.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 positivo503
. Se riscontri
503
errori con il codice di errore X-Apigee corrispondente al valore diprotocol.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
- 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. - Esamina il messaggio di errore e determina il codice di stato
indicato in
faultstring
per un errore durante la creazione del tunnel. - In questo scenario, il codice di stato è
403
, che significa Accesso negato. - 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.
- Esamina le eventuali restrizioni del firewall e/o ACL configurate sul server di backend che può impedire la creazione del tunnel.
- A seconda del tipo di firewall e/o delle restrizioni ACL, dovrai risolvere il problema in modo appropriato.
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:
- Accertarsi che
faultstring
contengaProxy refused to create tunnel with response status 403
utilizzando la traccia come spiegato in Passaggi comuni per la diagnosi. - Vai alla fase Flusso di richiesta target avviato ed esamina il Intestazioni delle richieste
- Verifica il valore del nome host specificato nell'intestazione Host nella sezione Intestazioni della richiesta.
- Se l'intestazione Host contiene il nome host proxy, si tratta del nome causa di questo errore.
- 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.
- 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 erroreProxy refused to create tunnel with response status 403
.
tcpdump
a determinare l'intestazione host utilizzando tcpdump.
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.- Analizza i dati
tcpdump
utilizzando il comando strumento Wireshark o simile lo strumento a riga di comando gcloud. Di seguito è riportato un esempio di analisi tcpdump utilizzando Wireshark:
- 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.
- Nel pacchetto 16, il processore di messaggi si è connesso all'host proxy
httpbin.org
(mostrato nell'esempio sopra). 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.
- 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 soprahttpin.org
, l'operazione non riesce e restituisce l'erroreProxy refused to create tunnel with response status 403
.
- Accertarsi che
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:
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>
Assicurati che le altre proprietà relative a proxy di inoltro sono configurati nel processore di messaggi come segue:
- Esamina il file
/opt/apigee/customer/application/message-processor.properties
su ciascuno dei processori di messaggi. 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
- Esamina il file
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