Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
Problème constaté
L'application cliente reçoit un code d'état HTTP 503 Service Unavailable
avec le code d'erreur protocol.http.ProxyTunnelCreationFailed
comme réponse aux appels d'API.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 503 Service Unavailable
De plus, le message d'erreur suivant peut s'afficher:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Proxy de transfert et tunnelisation
Apigee Edge permet à vos proxys d'API de communiquer avec votre serveur backend via un serveur proxy, comme expliqué dans la section
Configurer un proxy de transfert. Le serveur proxy ouvre une connexion sécurisée (HTTPS) ou non sécurisée (HTTP) au serveur backend en fonction du type de proxy utilisé par la propriété HTTPClient.proxy.type
et transfère les données dans les deux sens. C'est ce que l'on appelle la tunnelisation.
Par défaut, Apigee Edge utilise la tunnellisation pour tout le trafic. Pour désactiver la tunnellisation, la propriété HTTPClient.use.tunneling
doit être définie sur false
.
Code d'erreur: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge renvoie le code d'erreur protocol.http.ProxyTunnelCreationFailed
si le serveur proxy ne parvient pas à créer de tunnel entre Apigee Edge et le serveur backend en raison de problèmes tels qu'un pare-feu, des restrictions de LCA (liste de contrôle d'accès), des problèmes DNS, une indisponibilité du serveur backend, des délais avant expiration, etc.
Le code d'état dans le faultstring
de la réponse d'Apigee Edge indique généralement une cause de niveau élevé possible qui a conduit à cette erreur.
Modèle de chaîne de panne:
Proxy refused to create tunnel with response status STATUS_CODE
Causes possibles de certains codes d'état observés dans faultstring:
Le tableau suivant décrit les causes possibles en fonction du code d'état indiqué dans faultstring
:
Chaîne d'erreur | Description |
---|---|
Le proxy a refusé de créer un tunnel avec l'état de réponse 403 |
Cela peut être dû à des restrictions de pare-feu ou de LCA configurées sur le serveur backend qui empêchent la création du tunnel. |
Le proxy a refusé de créer un tunnel avec l'état de réponse 503 |
Cela peut être dû à des problèmes DNS, à des restrictions de pare-feu ou à l'indisponibilité du serveur backend qui empêche la création du tunnel. |
Le proxy a refusé de créer un tunnel avec l'état de réponse 504 |
Cela peut se produire s'il y a des délais avant expiration lors de la création du tunnel. |
Selon le code d'état observé dans faultstring
, vous devez utiliser les techniques appropriées pour résoudre le problème. Ce playbook explique comment résoudre le problème si vous observez le code d'état 403
dans faultstring
pour le code d'erreur protocol.http.ProxyTunnelCreationFailed
.
Causes possibles
Cette erreur (code d'état 403
) se produit si des restrictions de pare-feu ou de LCA (liste de contrôle d'accès) sont configurées sur le serveur backend pour empêcher le serveur proxy d'établir le tunnel entre Apigee Edge et le serveur backend.
Cause | Description | Instructions de dépannage applicables |
---|---|---|
Le proxy a refusé de créer un tunnel avec l'état de réponse 403 | Le serveur proxy refuse de créer le tunnel, car il reçoit le nom d'hôte du serveur proxy au lieu du nom d'hôte du serveur backend dans l'en-tête Host . |
Utilisateurs de cloud privé Edge uniquement |
Étapes de diagnostic courantes
Utilisez l'un des outils ou techniques suivants pour diagnostiquer cette erreur:
Outil de traçage
Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez la session de trace, puis effectuez l'une des opérations suivantes :
- Attendez que l'erreur se produise.
- Si vous pouvez reproduire le problème, effectuez un appel d'API pour reproduire le problème
503 Service Unavailable
avecProxy refused to create tunnel with response status 403
.
Assurez-vous que l'option Show all FlowInfos (Afficher tous les FlowInfos) est activée:
- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourez les différentes phases de la trace et localisez l'origine de l'échec.
L'erreur s'affiche généralement après la phase Début du flux de requête cible, comme indiqué ci-dessous:
Prenez note des informations suivantes:
erreur:
Proxy refused to create tunnel with response status 403
- Accédez à la phase AX (Données analytiques enregistrées) dans la trace et cliquez dessus.
Faites défiler la page jusqu'à la section En-têtes de réponse Détails de la phase et déterminez les valeurs de X-Apigee-fault-code et de X-Apigee-fault-source, comme indiqué ci-dessous:
Les valeurs X-Apigee-fault-code et X-Apigee-fault-source s'affichent respectivement sous
protocol.http.ProxyTunnelCreationFailed
ettarget
. Elles indiquent que cette erreur est causée par l'échec de la création du tunnel proxy, car l'en-tête d'hôte attendu n'est pas reçu.En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX, procédez comme suit:
- Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations essentielles sur les erreurs HTTP
503 Service Unavailable
. Vérifiez les journaux d'accès NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log
Où:ORG, ORG et PORT# sont remplacés par des valeurs réelles.
- Recherchez s'il existe des erreurs
503
avec le code d'erreurprotocol.http.ProxyTunnelCreationFailed
pendant une durée spécifique (si le problème s'est produit par le passé) ou si des requêtes échouent toujours avec503
. Si vous trouvez des erreurs
503
avec le X-Apigee-fault-code correspondant à la valeur de X-Apigee-fault-code , déterminez la valeur de la source X-Apigee-fault-code .Exemple d'erreur 503 du journal d'accès NGINX:
L'exemple d'entrée ci-dessus du journal d'accès NGINX contient les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :
En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
Cause: le proxy a refusé de créer un tunnel avec l'état de réponse 403
Diagnostic
- Déterminez le code d'erreur et la source d'erreur pour
503 Service Unavailable
à l'aide de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans la section Étapes de diagnostic courantes. - Examinez le message d'erreur et déterminez le code d'état indiqué dans le
faultstring
en cas d'échec de la création du tunnel. - Dans ce scénario, le code d'état est
403
, ce qui signifie Interdit. - Cela signifie que les droits ou privilèges ne sont pas suffisants pour créer le tunnel. Cela peut généralement se produire si des restrictions de pare-feu ou de LCA (liste de contrôle d'accès) empêchent la création du tunnel.
- Examinez toutes les restrictions de pare-feu et/ou de LCA configurées sur votre serveur backend susceptibles d'empêcher la création du tunnel.
- Selon le type de pare-feu et/ou les restrictions LCA, vous devrez résoudre le problème de manière appropriée.
Prenons un exemple de restriction de pare-feu pour expliquer comment résoudre ce problème:
Scénario: La restriction de pare-feu sur le serveur backend s'attend à ce que l'en-tête d'hôte contienne toujours le nom d'hôte du serveur backend
Vous pouvez utiliser l'une des méthodes suivantes pour déterminer l'en-tête d'hôte transmis par Apigee Edge:
Trace
Pour déterminer l'en-tête d'hôte à l'aide de Trace:
- Vérifiez que
faultstring
contientProxy refused to create tunnel with response status 403
à l'aide d'une trace, comme expliqué dans la section Étapes de diagnostic courantes. - Accédez à la phase Début du flux de requête cible et consultez la section En-têtes de requête.
- Vérifiez la valeur du nom d'hôte spécifié dans l'en-tête de l'hôte de la section En-têtes de requête.
- Si l'en-tête Host (Hôte) contient le nom d'hôte du proxy, c'est la cause de cette erreur.
- En effet, le pare-feu est configuré sur le serveur backend pour n'accepter les requêtes que si l'en-tête de l'hôte contient le nom du serveur backend.
- Ainsi, lorsque le serveur proxy tente de créer le tunnel avec le serveur backend, il échoue et renvoie l'erreur
Proxy refused to create tunnel with response status 403
.Exemple de trace montrant un en-tête d'hôte ayant un nom d'hôte proxy
( Afficher l'image plus grande)
L'exemple de trace ci-dessus montre que l'en-tête de l'hôte contient le nom de l'hôte proxy.
www.proxyserver.com.
Comme une restriction de pare-feu est configurée sur le serveur backend et ne s'attend à ce que seul le nom d'hôte du serveur backend soit contenu dans l'en-tête de l'hôte, l'erreurProxy refused to create tunnel with response status 403
s'affiche.
tcpdump
Déterminer l'en-tête d'hôte à l'aide de tcpdump
Capturez un
tcpdump
sur le serveur proxy pour les requêtes provenant du composant de processeur de messages d'Apigee Edge à l'aide de la commande suivante:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Pour plus d'informations sur l'utilisation de la commande
tcpdump
, consultez la page tcpdump.- Analysez les données
tcpdump
à l'aide de l'outil Wireshark ou d'un outil similaire. Voici un exemple d'analyse de tcpdump avec Wireshark:
- Les numéros de paquet 13, 14 et 15 indiquent que le processeur de messages établit la connexion au serveur proxy via un processus de handshake TCP à trois voies.
- Dans le paquet 16, le processeur de messages s'est connecté à l'hôte proxy
httpbin.org
(illustré dans l'exemple ci-dessus). Sélectionnez le paquet 16 et examinez-le en détail, et plus particulièrement l'en-tête de l'hôte transmis au serveur proxy par le processeur de messages.
- L'exemple ci-dessus montre Host Header (En-tête de l'hôte)
httpin.org
, qui correspond au nom d'hôte du serveur proxy. Par conséquent, lorsque le serveur proxy tente de créer le tunnel avec le serveur backend en transmettant l'en-tête d'hôtehttpin.org
ci-dessus, il échoue avec l'erreurProxy refused to create tunnel with response status 403
.
- Vérifiez que
Résolution
Scénario: La restriction de pare-feu sur le serveur proxy s'attend à ce que l'en-tête d'hôte contienne toujours le nom d'hôte du serveur backend
Si vous avez vérifié que cette erreur est due au fait que le pare-feu du serveur backend est configuré de sorte qu'il s'attend à ce que l'en-tête de l'hôte contienne toujours le nom d'hôte du serveur backend, alors que le processeur de messages envoie le nom d'hôte du serveur proxy, procédez comme suit pour résoudre le problème:
Définissez la propriété
use.proxy.host.header.with.target.uri
sur "true" dans TargetEndpoint, comme indiqué dans l'exemple suivant:Exemple de configuration du point de terminaison cible:
<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>
Assurez-vous que les autres propriétés liées au proxy de transfert sont configurées sur le processeur de messages comme suit:
- Examinez le fichier
/opt/apigee/customer/application/message-processor.properties
sur chacun des processeurs de messages. Assurez-vous que les propriétés suivantes sont définies conformément à votre cas d'utilisation ou à vos exigences:
Exemples de valeurs pour les propriétés:
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
- Examinez le fichier
Vous devez collecter des informations de diagnostic
Si le problème persiste même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge:
Si vous êtes un utilisateur du Private Cloud, fournissez les informations suivantes:
- Message d'erreur complet observé pour les requêtes ayant échoué
- Nom de l'environnement
- Groupe de proxys d'API
- Fichier de suivi des requêtes API
Journaux d'accès NGINX
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
Où:ORG, ENV et PORT# sont remplacés par des valeurs réelles.
Journaux système du processeur de messages
/opt/apigee/var/log/edge-message-processor/logs/system.log