Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
L'applicazione client riceve un codice di stato HTTP 503 Service Unavailable con il
codice di errore protocol.http.ProxyTunnelCreationFailed come risposta alle 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 inoltro e tunneling
Apigee Edge consente ai proxy API di comunicare con il server di backend tramite un server proxy, come spiegato in
Configurare il proxy di inoltro. 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. Questa operazione è nota come tunneling.
Per impostazione predefinita, Apigee Edge utilizza il tunneling per tutto il traffico. Per disattivare 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 come firewall, restrizioni dell'elenco di controllo dell'accesso (ACL), problemi DNS, indisponibilità del server di backend, timeout e così via.
Il codice di stato nel faultstring della risposta di Apigee Edge in genere
indica una possibile causa di alto livello che ha portato a questo errore.
Modello di faultstring:
Proxy refused to create tunnel with response status STATUS_CODE
Possibili cause di alcuni dei codici di stato osservati in faultstring:
La tabella seguente descrive le possibili cause a seconda del codice di stato indicato nel
faultstring:
| Faultstring | Descrizione |
|---|---|
Proxy refused to create tunnel with response status 403 |
Questo può accadere a causa di restrizioni firewall o ACL configurate sul server di backend che impediscono la creazione del tunnel. |
Proxy refused to create tunnel with response status 503 |
Questo può accadere a causa di problemi DNS, restrizioni firewall, indisponibilità del server di backend che impedisce la creazione del tunnel |
| Proxy refused to create tunnel with response status 504 |
Questo può accadere se si verificano timeout durante la creazione del tunnel |
A seconda del codice di stato osservato nella faultstring, devi utilizzare
tecniche appropriate per risolvere il problema. Questo playbook spiega come risolvere
il problema se osservi 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 sul server di backend sono configurate restrizioni firewall o ACL (Access
Control List) che impediscono al server proxy di creare il tunnel tra Apigee Edge e il server di backend.
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Proxy refused to create tunnel with response status 403 | Il server proxy si rifiuta di creare il tunnel perché riceve il nome host del server proxy
anziché il nome host del server di backend nell'intestazione Host. |
Solo per gli utenti di Edge Private Cloud |
Passaggi comuni per la diagnosi
Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:
Strumento di traccia
Per diagnosticare l'errore utilizzando lo strumento di traccia:
- Attiva la sessione di traccia e
- Attendi che si verifichi l'errore oppure
- Se riesci a riprodurre il problema, effettua la chiamata API per riprodurre il problema
503 Service UnavailableconProxy refused to create tunnel with response status 403.
Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia attivata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore viene visualizzato dopo la fase Target Request Flow Started come mostrato di seguito:
Prendi nota delle seguenti informazioni:
error:
Proxy refused to create tunnel with response status 403- Vai alla fase AX (Analytics Data Recorded) nella traccia e fai clic su di essa.
Scorri verso il basso fino alla sezione Phase Details Response Headers e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source come mostrato di seguito:
( visualizza immagine più grande)
( visualizza immagine più grande)
Vedrai i valori di X-Apigee-fault-code e X-Apigee-fault-source come
protocol.http.ProxyTunnelCreationFailedetargetrispettivamente, a indicare che questo errore è causato dal fatto che la creazione del tunnel proxy non è riuscita perché non è stata ricevuta l'intestazione host prevista.Intestazioni della risposta Valore X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailedX-Apigee-fault-source target
NGINX
Per diagnosticare l'errore utilizzando i log degli accessi NGINX:
- Se sei un utente di Private Cloud, puoi utilizzare i log degli accessi NGINX per
determinare le informazioni chiave sugli errori HTTP
503 Service Unavailable. Controlla i log degli accessi NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_logDove: ORG, ORG e PORT# vengono sostituiti con i valori effettivi.
- Cerca se sono presenti errori
503con il codice di erroreprotocol.http.ProxyTunnelCreationFaileddurante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono presenti richieste che non vanno ancora a buon fine con503. Se trovi errori
503con X-Apigee-fault-code corrispondente al valore diprotocol.http.ProxyTunnelCreationFailed, allora determina il valore di X-Apigee-fault-source.Esempio di errore 503 dal log degli accessi NGINX:
La voce di esempio riportata sopra 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.ProxyTunnelCreationFailedX-Apigee-fault-source target
Causa: Proxy refused to create tunnel with response status 403
Diagnosi
- Determina il codice di errore e l'origine dell'errore per
503 Service Unavailableutilizzando lo strumento di traccia o i log degli accessi NGINX, come spiegato in Passaggi comuni per la diagnosi. - Esamina il messaggio di errore e determina il codice di stato
indicato nella
faultstringper l'errore nella creazione del tunnel. - In questo scenario, il codice di stato è
403, il che significa Forbidden. - Ciò significa che non sono presenti diritti o privilegi sufficienti per creare il tunnel. In genere, questo può accadere se sono presenti restrizioni firewall o ACL (elenco di controllo dell'accesso) che impediscono la creazione del tunnel.
- Esamina le restrizioni firewall e/o ACL configurate sul server di backend che possono impedire la creazione del tunnel.
- A seconda del tipo di restrizioni firewall e/o ACL, devi risolvere il problema in modo appropriato.
Prendiamo come esempio una restrizione firewall per spiegare come risolvere il problema:
Scenario: la restrizione firewall sul server di backend prevede che l'intestazione Host contenga sempre il nome host del server di backend
Puoi utilizzare uno dei seguenti modi per determinare l'intestazione Host passata da Apigee Edge:
Traccia
Per determinare l'intestazione Host utilizzando la traccia:
- Verifica che
faultstringcontengaProxy refused to create tunnel with response status 403utilizzando la traccia, come spiegato in Passaggi comuni per la diagnosi. - Vai alla fase Target Request Flow Started ed esamina le intestazioni della richiesta
- Verifica il valore del nome host specificato nell'intestazione Host nella sezione Intestazioni della richiesta.
- Se l'intestazione Host contiene il nome host del proxy, questa è la causa dell'errore.
- Questo perché il firewall è configurato sul server di backend per accettare le richieste solo se l'intestazione Host contiene il nome del server di backend.
- Pertanto, quando il server proxy tenta di creare il tunnel con il server di backend, non riesce a causa dell'errore
Proxy refused to create tunnel with response status 403.Esempio di traccia che mostra l'intestazione Host con il nome host del proxy
( visualizza immagine più grande)
Nell'esempio di traccia mostrato sopra, l'intestazione Host contiene il nome dell'host proxy
www.proxyserver.com.Poiché sul server di backend è configurata una restrizione firewall che prevede che solo il nome host del server di backend sia contenuto nell' intestazione Host, viene visualizzato l' erroreProxy refused to create tunnel with response status 403.
tcpdump
Per determinare l'intestazione Host utilizzando tcpdump
Acquisisci un
tcpdumpsul server proxy per le richieste provenienti da componente del 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'utilizzo del comando
tcpdump, consulta tcpdump.- Analizza i dati
tcpdumputilizzando lo strumento Wireshark o uno strumento simile. Di seguito è riportato un esempio di analisi di tcpdump utilizzando Wireshark:
( visualizza immagine più grande)
- I numeri di pacchetto 13, 14 e 15 mostrano che il processore di messaggi sta stabilendo la connessione al server proxy tramite una procedura di handshake TCP a tre vie.
- Nel pacchetto 16, il processore di messaggi si è connesso all'host proxy
httpbin.org(mostrato nell'esempio sopra). Seleziona il pacchetto 16 ed esamina in dettaglio il contenuto del pacchetto, in particolare l'intestazione Host passata al server proxy dal processore di messaggi.
- L'esempio sopra mostra l'intestazione Host
httpin.org, che è il nome host del server proxy. Pertanto, quando il server proxy tenta di creare il tunnel con il server di backend passando l'intestazione Hosthttpin.org, non riesce a causa dell'erroreProxy refused to create tunnel with response status 403.
- Verifica che
Risoluzione
Scenario: la restrizione firewall sul server proxy prevede che l'intestazione 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 da prevedere che l'intestazione Host contenga sempre il nome host del server di backend, mentre il processore di messaggi invia il nome host del server proxy, segui questi passaggi per risolvere il problema:
Imposta la proprietà
use.proxy.host.header.with.target.urisu 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 a proxy di inoltro siano configurate nel processore di messaggi come segue:
- Esamina il file
/opt/apigee/customer/application/message-processor.propertiessu 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
Informazioni di diagnostica da raccogliere
Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni di diagnostica e contatta 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 del proxy API
- File di traccia per le richieste API
Log degli accessi NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logDove: 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