<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Symptôme
L'application cliente obtient le code d'état HTTP 503 Service Unavailable
avec le paramètre
Code d'erreur protocol.http.ProxyTunnelCreationFailed
en 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
Le message d'erreur suivant peut également s'afficher:
{ "fault":{ "faultstring":"Proxy refused to create tunnel with response status 403", "detail":{ "errorcode":"protocol.http.ProxyTunnelCreationFailed" } } }
Proxy de transfert et tunneling
Apigee Edge permet à vos proxys d'API de communiquer avec votre serveur backend via un proxy
comme expliqué dans
<ph type="x-smartling-placeholder"></ph>
Configurez le proxy de transfert. Le serveur proxy ouvre une page sécurisée (HTTPS) ou non
(HTTP) au serveur backend en fonction du type de proxy (indiqué
par la propriété HTTPClient.proxy.type
) utilisée et transfère les données
dans les deux sens. C'est ce qu'on appelle le tunnel.
Par défaut, Apigee Edge utilise la tunnelisation pour tout le trafic. Pour désactiver la tunnelisation, la propriété
HTTPClient.use.tunneling
doit être défini sur false
.
Code d'erreur: Protocol.http.ProxyTunnelCreationFailed
Apigee Edge renvoie le code d'erreur protocol.http.ProxyTunnelCreationFailed
si le
le serveur proxy n'est pas en mesure de créer un tunnel entre Apigee Edge et le serveur backend en raison d'une
tels que le pare-feu, les restrictions de liste de contrôle d'accès (LCA), les problèmes de DNS, le serveur backend
une indisponibilité, des délais d'inactivité, etc.
Le code d'état dans le faultstring
de la réponse d'Apigee Edge généralement
indique une cause possible générale à l'origine de cette erreur.
Modèle de chaîne de défaillance (Faultstring) :
Proxy refused to create tunnel with response status STATUS_CODE
Causes possibles d'une partie du code d'état observé dans faultstring:
Le tableau suivant décrit les causes possibles en fonction du code d'état indiqué dans le champ
faultstring
:
Faultstring | Description |
---|---|
Le proxy a refusé de créer un tunnel avec l'état de réponse 403 |
Cela peut se produire en raison de restrictions de pare-feu ou de LCA configurées sur qui empêche la création d'un tunnel. |
Le proxy a refusé de créer un tunnel avec l'état de réponse 503 |
Cela peut se produire en raison de problèmes DNS, de restrictions du pare-feu, de la configuration une indisponibilité empêchant la création d'un tunnel |
Le proxy a refusé de créer un tunnel avec l'état de réponse 504 |
Cela peut se produire en cas d'expiration des délais 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 s'il existe des règles de pare-feu ou de LCA
liste de contrôle) des restrictions configurées sur le serveur backend qui empêchent le tunnel d'être
créé entre Apigee Edge et le serveur backend par le serveur proxy.
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'une des techniques ou l'un des outils suivants pour diagnostiquer ce problème:
Outil Trace
Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez la session Trace et
soit:
<ph type="x-smartling-placeholder">
- </ph>
- Attendez que l'erreur se produise.
- Si vous pouvez reproduire le problème, effectuez l'appel d'API pour le reproduire.
503 Service Unavailable
avecProxy refused to create tunnel with response status 403
.
Assurez-vous que l'option Show all FlowInfos (Afficher toutes les infos FlowInfos) est activée:
- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourir les différentes phases de la trace et localiser l'origine de la défaillance s'est produit.
L'erreur s'affiche généralement après la phase Target Request Flow Started (Flux de requête cible démarré). comme indiqué ci-dessous:
Notez les 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, puis cliquez dessus.
Faites défiler la page jusqu'à la section Phase Details (Détails de la phase) Response Headers (En-têtes de réponse). déterminer les valeurs de X-Apigee-fault-code et X-Apigee-fault-source par comme indiqué ci-dessous:
Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source à
protocol.http.ProxyTunnelCreationFailed
ettarget
, respectivement, ce qui indique que cette erreur est due au fait que le tunnel proxy la création a échoué, car l'en-tête d'hôte attendu n'a pas été reçu.En-têtes de réponse Valeur X-Apigee-fault-code protocol.http.ProxyTunnelCreationFailed
X-Apigee-fault-source target
NGINX
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX:
- Si vous êtes un utilisateur du Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour
Déterminer les informations clés concernant HTTP
503 Service Unavailable
les erreurs. 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.
- Effectuez une recherche pour voir s'il existe des erreurs
503
avec un code d'erreurprotocol.http.ProxyTunnelCreationFailed
pendant une durée spécifique (si le si le problème s'est produit dans le passé) ou si des requêtes échouent encore503
Si vous trouvez des erreurs
503
avec le code X-Apigee-fault-code correspondant à la valeur deprotocol.http.ProxyTunnelCreationFailed
, puis déterminer la valeur de X-Apigee-fault-source..Exemple d'erreur 503 dans le journal d'accès NGINX:
L'exemple d'entrée ci-dessus du journal d'accès NGINX présente 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
<ph type="x-smartling-placeholder">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 Étapes de diagnostic courantes. - Examinez le message d'erreur et identifiez 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 vous ne disposez pas des droits suffisants pour créer le tunnel. Cela pourrait se produisent généralement s'il existe des restrictions de pare-feu ou de liste de contrôle d'accès (LCA) qui empêcher la création du tunnel.
- Vérifiez les restrictions de pare-feu et/ou de liste de contrôle d'accès configurées sur votre serveur backend peut empêcher la création du tunnel.
- Selon le type de restrictions de pare-feu et/ou de LCA, vous devez résoudre le problème en conséquence.
Prenons un exemple de restriction de pare-feu pour expliquer comment problème:
Scénario: une restriction de pare-feu sur le serveur backend s'attend à ce que l'en-tête de l'hôte soit toujours contiennent 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 de l'hôte à l'aide de Trace, procédez comme suit:
- Assurez-vous que
faultstring
contientProxy refused to create tunnel with response status 403
à l'aide de la trace, comme expliqué dans Étapes de diagnostic courantes. - Accédez à la phase Flux de requête cible démarré et examinez les En-têtes de requêtes
- Vérifiez la valeur du nom d'hôte spécifié dans le champ Host header (En-tête d'hôte) du champ Section En-têtes de requête.
- Si l'en-tête Host contient le nom d'hôte du proxy, il s'agit du la cause de cette erreur.
- En effet, le pare-feu est configuré sur le serveur backend pour accepter uniquement 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 avec l'erreur
Proxy refused to create tunnel with response status 403
.Exemple de trace montrant l'en-tête d'hôte avec le nom d'hôte du proxy
Dans l'exemple de trace ci-dessus, il montre que l'en-tête de l'hôte contient le nom de l'hôte du proxy.
www.proxyserver.com.
Étant donné qu'il existe une restriction de pare-feu configurée sur le serveur backend qui n'attend que nom d'hôte du serveur backend à contenir dans l' en-tête d'hôte, vous obtenez le l'erreurProxy refused to create tunnel with response status 403
.
tcpdump
Déterminer l'en-tête de l'hôte à l'aide de tcpdump
Capturez un
tcpdump
sur le serveur proxy pour les requêtes provenant de le composant de processeur de messages d'Apigee Edge avec la commande suivante:tcpdump -i any -s 0 host MP_IP_ADDRESS -w FILE_NAME
Pour en savoir plus sur l'utilisation de la commande
tcpdump
, consultez les pages <ph type="x-smartling-placeholder"></ph> tcpdump.- Analyser les données de
tcpdump
à l'aide des Outil Wireshark ou similaire . Voici un exemple d'analyse <ph type="x-smartling-placeholder"></ph> tcpdump à l'aide de Wireshark:
- Les numéros de paquets 13, 14 et 15 indiquent que le message Le processeur établit une connexion avec le serveur proxy via un protocole TCP à trois voies le processus de handshake.
- Dans le paquet 16, le processeur de messages s'est connecté à l'hôte proxy.
httpbin.org
(comme illustré dans l'exemple ci-dessus). Sélectionnez le paquet 16, puis examinez-en en détail le contenu et en particulier l'en-tête d'hôte transmis au serveur proxy par le service Processeur.
- L'exemple ci-dessus montre l'en-tête d'hôte
httpin.org
, qui est le nom d'hôte du serveur proxy. Par conséquent, lorsque le serveur proxy tente Créez le tunnel avec le serveur backend en transmettant l'en-tête d'hôte ci-dessus.httpin.org
, elle échoue avec l'erreurProxy refused to create tunnel with response status 403
.
- Assurez-vous que
Solution
Scénario: la restriction du pare-feu sur le serveur proxy s'attend à ce que l'en-tête de l'hôte toujours contenir le nom d'hôte du serveur backend
Si vous êtes certain que cette erreur est en cause parce que le pare-feu sur le serveur backend est configuré de sorte que l'en-tête de l'hôte doive toujours contenir le serveur backend nom d'hôte, tandis que le processeur de messages envoie le nom d'hôte du serveur proxy, effectuez 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 illustré dans l'exemple suivant:Exemple de configuration 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>
<ph type="x-smartling-placeholder">Assurez-vous que les autres propriétés <ph type="x-smartling-placeholder"></ph> proxy de transfert sont configurés 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
<ph type="x-smartling-placeholder">
- Examinez le fichier
Vous devez collecter des informations de diagnostic
Si le problème persiste alors que vous avez suivi les instructions ci-dessus, rassemblez les informations suivantes : de diagnostic, 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 en échec
- 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
Références
- <ph type="x-smartling-placeholder"></ph> Configurer un proxy de transfert
- <ph type="x-smartling-placeholder"></ph> Tunnelisation SSL