503 Service indisponible - Échec de la création du tunnel proxy avec 403

<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.

<ph type="x-smartling-placeholder">.

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

403 - Forbidden

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

503 - Service Unavailable

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

504 - Gateway Timeout

Cela peut se produire en cas d'expiration des délais lors de la création du tunnel.

<ph type="x-smartling-placeholder">

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.

<ph type="x-smartling-placeholder">
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:

  1. 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 avec Proxy refused to create tunnel with response status 403.
  2. Assurez-vous que l'option Show all FlowInfos (Afficher toutes les infos FlowInfos) est activée:

  3. Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
  4. Parcourir les différentes phases de la trace et localiser l'origine de la défaillance s'est produit.
  5. 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

  6. Accédez à la phase AX (Données analytiques enregistrées) dans la trace, puis cliquez dessus.
  7. 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:

    ( Agrandir l'image)

    ( Agrandir l'image)

  8. Vous verrez les valeurs de X-Apigee-fault-code et X-Apigee-fault-source à protocol.http.ProxyTunnelCreationFailed et target , 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:

  1. 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.
  2. Vérifiez les journaux d'accès NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ORG.PORT#_access_log

    :ORG, ORG et PORT# sont remplacés par des valeurs réelles.

  3. Effectuez une recherche pour voir s'il existe des erreurs 503 avec un code d'erreur protocol.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 encore 503
  4. Si vous trouvez des erreurs 503 avec le code X-Apigee-fault-code correspondant à la valeur de protocol.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

  1. 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.
  2. 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.
  3. Dans ce scénario, le code d'état est 403, ce qui signifie Interdit.
  4. 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.
  5. 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.
  6. Selon le type de restrictions de pare-feu et/ou de LCA, vous devez résoudre le problème en conséquence.
  7. 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:

    1. Assurez-vous que faultstring contient Proxy refused to create tunnel with response status 403 à l'aide de la trace, comme expliqué dans Étapes de diagnostic courantes.
    2. Accédez à la phase Flux de requête cible démarré et examinez les En-têtes de requêtes
    3. 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.
    4. Si l'en-tête Host contient le nom d'hôte du proxy, il s'agit du la cause de cette erreur.
    5. 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.
    6. 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

      ( Agrandir l'image)

      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'erreur Proxy refused to create tunnel with response status 403.

    tcpdump

    Déterminer l'en-tête de l'hôte à l'aide de tcpdump

    1. 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.

    2. Analyser les données de tcpdump à l'aide des Outil Wireshark ou similaire .
    3. Voici un exemple d'analyse <ph type="x-smartling-placeholder"></ph> tcpdump à l'aide de Wireshark:

      ( Agrandir l'image)

    4. 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.
    5. Dans le paquet 16, le processeur de messages s'est connecté à l'hôte proxy. httpbin.org (comme illustré dans l'exemple ci-dessus).
    6. 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.

    7. 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'erreur Proxy refused to create tunnel with response status 403.

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:

  1. 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">
  2. 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:

    1. Examinez le fichier /opt/apigee/customer/application/message-processor.properties sur chacun des processeurs de messages.
    2. 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">

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

    :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