Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Sintomo
L'applicazione client riceve un codice di stato HTTP 503 Service Unavailable
con il 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
Inoltre, potresti visualizzare il seguente messaggio di errore:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Proxy di forwarding e tunnelling
Apigee Edge consente ai proxy API di comunicare con il server di backend attraverso un server proxy, come spiegato in
Configurare il proxy di forwarding. Il server proxy apre una connessione sicura (HTTPS) o non sicura (HTTP) al server di backend a seconda del tipo di proxy (indicato dalla proprietà HTTPClient.proxy.type
) utilizzato e trasferisce i dati in entrambe le direzioni. Questo sistema è noto come tunneling.
Per impostazione predefinita, Apigee Edge utilizza il tunneling per tutto il traffico. Per disabilitare il tunneling, la proprietà
HTTPClient.use.tunneling
deve essere impostata su false
.
Codice di errore: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge restituisce il codice di errore protocol.http.ProxyTunnelCreationFailed
se il server proxy non è in grado di creare un tunnel tra Apigee Edge e il server di backend a causa di problemi quali firewall, limitazioni dell'elenco di controllo di accesso (ACL), problemi DNS, mancata disponibilità del server di backend, timeout e così via.
Il codice di stato in 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 in faultstring:
La seguente tabella descrive le possibili cause in base al codice di stato indicato in
faultstring
:
Stringa di errore | Descrizione |
---|---|
Il proxy ha rifiutato di creare il tunnel con stato di risposta 403 |
Ciò può accadere probabilmente a causa di restrizioni del firewall o dell'ACL configurate sul server di backend che impediscono la creazione del tunnel. |
Il proxy ha rifiutato di creare il tunnel con stato di risposta 503 |
Ciò può accadere a causa di problemi DNS, limitazioni del firewall, indisponibilità del server di backend che impedisce la creazione del tunnel. |
Il proxy ha rifiutato di creare il tunnel con stato di 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
tecniche appropriate per risolvere il problema. Questo playbook spiega come risolvere il problema se noti il codice di stato 403
nel campo faultstring
per il codice di errore protocol.http.ProxyTunnelCreationFailed
.
Possibili cause
Questo errore (codice di stato 403
) si verifica se sul server di backend sono configurate restrizioni del firewall o dell'elenco di controllo di accesso (ACL) che impediscono la creazione del tunnel tra Apigee Edge e il server di backend da parte del server proxy.
Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
---|---|---|
Il proxy ha rifiutato di creare il tunnel con stato di risposta 403 | Il server proxy si rifiuta di creare il tunnel poiché riceve il nome host del server proxy invece del nome host del server di backend nell'intestazione Host . |
Solo utenti Edge Private Cloud |
Passaggi di diagnosi più comuni
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Strumento Traccia
Per diagnosticare l'errore utilizzando lo strumento Trace:
- Abilita la sessione di traccia e:
- Attendi che si verifichi l'errore oppure
- Se riesci a riprodurre il problema, esegui la chiamata API per riprodurre il problema
503 Service Unavailable
conProxy refused to create tunnel with response status 403
.
Assicurati che l'opzione Mostra tutte le FlowInfos sia abilitata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
Di solito, l'errore viene visualizzato dopo la fase Inizio del flusso di richiesta target, come mostrato di seguito:
Prendi nota delle seguenti informazioni:
errore:
Proxy refused to create tunnel with response status 403
- Vai alla fase AX (Analytics Data Recorded) della traccia e fai clic.
Scorri verso il basso fino alla sezione Intestazioni della risposta Dettagli fase e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source rispettivamente come
protocol.http.ProxyTunnelCreationFailed
etarget
, indicando rispettivamente che questo errore è dovuto al fatto che la creazione del tunnel proxy non è riuscita perché l'intestazione host prevista non è stata ricevuta.Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:
- Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave sugli errori HTTP
503 Service Unavailable
. Controlla i log degli accessi di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Dove: ORG, ORG e PORT# vengono sostituiti con i valori effettivi.
- Cerca per vedere se si sono verificati errori
503
con il codice di erroreprotocol.http.ProxyTunnelCreationFailed
durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con503
. Se riscontri eventuali
503
errori con X-Apigee-fault-code corrispondenti al valore diprotocol.http.ProxyTunnelCreationFailed
, determina il valore di X-Apigee-fault-source.Esempio di errore 503 dal log degli accessi di NGINX:
La voce di esempio sopra riportata dal log degli accessi NGINX ha i seguenti valori per X- Apigee-fault-code e X-Apigee-fault-source:
Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Causa: il proxy ha rifiutato di creare il tunnel con stato di risposta 403
Diagnostica
- Determina il codice di errore e l'origine dell'errore per
503 Service Unavailable
utilizzando lo strumento Trace o i log di accesso di NGINX, come spiegato nella sezione Passaggi comuni della diagnostica. - Esamina il messaggio di errore e determina il codice di stato indicato in
faultstring
per l'errore durante la creazione del tunnel. - In questo scenario, il codice di stato è
403
, che significa Vietato. - Ciò significa che non ci sono diritti o privilegi sufficienti per creare il tunnel. In genere questo problema si verifica in caso di limitazioni del firewall o dell'elenco di controllo di accesso (ACL, Access Control List) che impediscono la creazione del tunnel.
- Esamina eventuali restrizioni firewall e/o ACL configurate sul server di backend che possono impedire la creazione del tunnel.
- A seconda del tipo di firewall e/o di restrizioni ACL, devi risolvere il problema in modo appropriato.
Facciamo un esempio di limitazione firewall per spiegare come risolvere questo problema:
Scenario: una limitazione del firewall sul server di backend prevede che l'intestazione dell'host contenga sempre il nome host del server di backend
Puoi utilizzare uno dei seguenti modi per determinare l'intestazione dell'host trasmessa da Apigee Edge:
Traccia
Per determinare l'intestazione dell'host utilizzando Trace:
- Verifica che
faultstring
contengaProxy refused to create tunnel with response status 403
utilizzando la traccia come spiegato nella sezione Passaggi comuni della diagnostica. - Vai alla fase Flusso di richieste target iniziato ed esamina le 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, è questa la causa dell'errore.
- Questo perché il firewall è configurato sul server di backend in modo da accettare le richieste solo se l'intestazione dell'host contiene il nome del server di backend.
- Di conseguenza, quando il server proxy tenta di creare il tunnel con il server di backend,
l'errore restituisce un errore
Proxy refused to create tunnel with response status 403
.Traccia di esempio che mostra l'intestazione dell'host con il nome host del proxy
( visualizza immagine ingrandita)
Nella traccia di esempio mostrata sopra, mostra che l'intestazione dell'host contiene il nome dell'host proxy
www.proxyserver.com.
Poiché sul server di backend è configurata una limitazione del firewall che prevede che solo il nome host del server di backend sia contenuto nell'intestazione dell'host, viene visualizzato l'erroreProxy refused to create tunnel with response status 403
.
tcpdump
Per determinare l'intestazione host utilizzando tcpdump
Acquisisci un
tcpdump
sul server proxy per le richieste provenienti dal componente Message Processor di Apigee Edge con il seguente comando:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Per maggiori informazioni sull'utilizzo del comando
tcpdump
, consulta tcpdump.- Analizza i dati di
tcpdump
usando lo strumento Wireshark o uno strumento simile. Ecco un esempio di analisi di tcpdump mediante Wireshark:
- I numeri di pacchetto 13, 14 e 15 indicano che il processore di messaggi sta stabilendo una connessione al server proxy tramite un processo di handshake TCP a tre vie.
- Nel pacchetto 16, il processore di messaggi si è connesso all'host proxy
httpbin.org
(mostrato nell'esempio precedente). Seleziona il pacchetto 16 ed esaminane il contenuto in dettaglio e, in particolare, l'intestazione host trasmessa al server proxy dal processore di messaggi.
- L'esempio riportato sopra mostra l'intestazione dell'host
httpin.org
, che è il nome host del server proxy. Di conseguenza, quando il server proxy tenta di creare il tunnel con il server di backend passando l'intestazione hosthttpin.org
riportata sopra, l'errore genera l'erroreProxy refused to create tunnel with response status 403
.
- Verifica che
Risoluzione
Scenario: una limitazione del firewall sul server proxy prevede che l'intestazione dell'host contenga sempre il nome host del server di backend
Se hai verificato che questo errore è causato dal fatto che il firewall sul server di backend è configurato in modo tale che l'intestazione dell'host contenga sempre il nome host del server backend, mentre il processore di messaggi invia il nome host del server proxy, esegui i passaggi seguenti per risolvere il problema:
Imposta la proprietà
use.proxy.host.header.with.target.uri
su true in 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 al proxy di inoltro siano configurate sul 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
Devi raccogliere dati diagnostici
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:
Se sei un utente Private Cloud, fornisci le seguenti informazioni:
- Messaggio di errore completo osservato per le richieste non riuscite
- Nome ambiente
- Bundle di proxy API
- File di traccia per le richieste API
Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Dove: ORG, ENV e PORT# vengono sostituiti con i valori effettivi.
Log di sistema del processore di messaggi
/opt/apigee/var/log/edge-message-processor/logs/system.log