Résoudre des problèmes d’affinité de session dans Azure Application Gateway
Découvrez comment diagnostiquer et résoudre des problèmes d’affinité de session avec Azure Application Gateway.
Remarque
Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.
Vue d’ensemble
La fonctionnalité d’affinité de session basée sur les cookies est utile pour conserver une session utilisateur sur le même serveur. En utilisant des cookies gérés de passerelle, la passerelle Application Gateway peut diriger le trafic pour traitement à partir d’une session utilisateur vers le même serveur. Ceci est important lorsque l’état de la session est enregistré localement sur le serveur pour une session utilisateur. L’affinité de session est également connue sous le terme de sessions permanentes.
Remarque
Application Gateway v1 émet un cookie appelé ARRAffinity, qui est utilisé pour diriger le trafic vers le même membre du pool de back-ends. Dans Application Gateway v2, ce cookie a été renommé ApplicationGatewayAffinity. Dans ce document, ApplicationGatewayAffinity sera utilisé comme exemple, et ARRAffinity pourra être utilisé à la place pour les instances Application Gateway v1 où cela s’applique.
Causes de problème possibles
Le problème du maintien de l’affinité de session basée sur des cookies peut se produire principalement pour les raisons suivantes :
- Le paramètre « Affinité basée sur les cookies » n’est pas activé.
- Votre application ne peut pas gérer l’affinité basée sur les cookies.
- L’application utilise une affinité basée sur les cookies, mais les demandes continuent de rebondir entre les serveurs back-end.
Vérifier si le paramètre « Affinité basée sur les cookies » est activé
Des problèmes d’affinité de session peuvent parfois se produire si vous oubliez d’activer le paramètre « Affinité basée sur les cookies ». Pour déterminer si vous avez l’activé sous l’onglet Paramètres HTTP dans le portail Azure, procédez comme suit :
Connectez-vous au Portail Azure.
Dans le volet de navigation gauche, cliquez sur Toutes les ressources. Cliquez sur le nom de la passerelle d’application dans le panneau Toutes les ressources. Si l’abonnement que vous avez sélectionné comporte déjà plusieurs ressources, vous pouvez saisir le nom de la passerelle applicative dans la zone Filtrer par nom pour accéder facilement à la passerelle applicative.
Sous PARAMÈTRES, sélectionnez Paramètres HTTP.
Sélectionnez le paramètre HTTP et, dans la page Ajouter un paramètre HTTP, vérifiez si l’affinité basée sur les cookies est activée.
Vous pouvez également vérifier que la valeur de CookieBasedAffinity est définie sur Activé sous backendHttpSettingsCollection en utilisant l’une des méthodes suivantes :
- Exécutez Get-AzApplicationGatewayBackendHttpSetting dans PowerShell.
- Examinez le fichier JSON en utilisant le modèle Azure Resource Manager.
"cookieBasedAffinity": "Enabled",
L’application ne peut pas gérer l’affinité basée sur les cookies
Cause
Le passerelle d’application ne peut gérer l’affinité de session qu’en utilisant un cookie.
Solution de contournement
Si l’application ne peut pas gérer l’affinité basée sur les cookies, vous devez utiliser un équilibreur de charge Azure interne ou externe ou une solution tierce.
L’application utilise une affinité basée sur les cookies, mais les demandes continuent de rebondir entre les serveurs back-end.
Symptôme
Si vous avez activé le paramètre Affinité basée sur les cookies, lorsque vous accédez à Application Gateway via une URL au nom court telle que http://website
dans Internet Explorer, la requête continuera de rebondir d’un serveur back-end à l’autre.
Pour identifier ce problème, suivez les instructions :
Prenez une trace de débogueur web sur le « Client » qui se connecte à l’application derrière Application Gateway (nous utilisons Fiddler dans cet exemple). Conseil Si vous ignorez comment utiliser Fiddler, activez l’option I want to collect network traffic and analyze it using web debugger (Je veux collecter le trafic réseau et l’analyser à l’aide du débogueur web) en bas de la page.
Vérifiez et analysez les journaux de session afin de déterminer si les cookies fournis par le client contiennent les détails ApplicationGatewayAffinity. Si vous ne trouvez pas les détails ApplicationGatewayAffinity, notamment ApplicationGatewayAffinity=ApplicationGatewayAffinityValue dans le jeu de cookies, cela signifie que le client ne répond pas avec le cookie ApplicationGatewayAffinity qui est fourni par Application Gateway. Par exemple :
L’application continue d’essayer de définir le cookie sur chaque demande jusqu’à ce qu’elle reçoive une réponse.
Cause
Ce problème se produit parce que Internet Explorer et d’autres navigateurs ne peuvent pas stocker ou utiliser le cookie avec une URL au short name.
Résolution
Pour résoudre ce problème, vous devez accéder à la passerelle d’application en utilisant un nom de domaine complet. Par exemple, utilisez http://website.com ou http://appgw.website.com.
Journaux supplémentaires pour résoudre des problèmes
Vous pouvez collecter des journaux supplémentaires et les analyser pour résoudre des problèmes liés à l’affinité de session basée sur les cookies.
Analyser les journaux Application Gateway
Pour collecter les journaux Application Gateway, procédez comme suit :
Activez la journalisation dans le portail Azure.
Dans le portail Azure, recherchez votre ressource, puis sélectionnez Paramètre de diagnostic.
Pour Application Gateway, trois journaux sont disponibles : Journal d’accès, Journal des performances et Journal du pare-feu.
Pour commencer à collecter des données, sélectionnez Ajouter un paramètre de diagnostic.
La page Paramètre de diagnostic contient les paramètres des journaux de diagnostic. Dans cet exemple, Log Analytics stocke les journaux d’activité. Vous pouvez également utiliser des concentrateurs d’événements et un compte de stockage pour enregistrer les journaux de diagnostic.
Confirmez les paramètres, puis sélectionnez Enregistrer.
Utiliser le débogueur web pour capturer et analyser les trafics HTTP ou HTTPS
Des outils de débogage web tels que Fiddler peuvent vous aider à déboguer des applications web en capturant le trafic réseau entre Internet et des ordinateurs de test. Ces outils vous permettent d’inspecter les données entrantes et sortantes à mesure que le navigateur les reçoit et les envoie. Dans cet exemple, Fiddler offre l’option de relecture HTTP qui peut vous aider à résoudre des problèmes d’applications web côté client, en particulier en lien avec l’authentification.
Utilisez le débogueur web de votre choix. Dans cet exemple, nous allons utiliser Fiddler pour capturer et analyser des trafics HTTP ou HTTPS. Procédez comme suit :
Téléchargez Fiddler.
Remarque
Choisissez Fiddler4 si .NET 4 est installé sur l’ordinateur de capture. Sinon, choisissez Fiddler2.
Cliquez avec le bouton droit sur l’exécutable d’installation, puis exécutez-le en tant qu’administrateur pour effectuer l’installation.
Lorsque vous ouvrez Fiddler, l’application devrait démarrer automatiquement la capture du trafic (notez que vous pouvez voir l’opération en cours dans l’angle inférieur gauche). Appuyez sur F12 pour démarrer ou arrêter la capture du trafic.
Comme vous vous intéressez très probablement au trafic HTTPS déchiffré, vous pouvez activer le déchiffrement HTTPS en sélectionnant Outils>Options Fiddler, puis en activant la case Déchiffrer le trafic HTTPS.
Vous pouvez supprimer des sessions antérieures non liées avant de reproduire le problème en cliquant sur X (icône) >Supprimer tout comme dans la capture d’écran suivante :
Une fois que vous avez reproduit le problème, enregistrez le fichier pour révision en sélectionnant Fichier>Enregistrer>Toutes les Sessions....
Vérifiez et analysez les journaux de session pour déterminer la cause du problème.
Exemples :
Exemple A : Vous trouvez un journal de session que la demande est envoyée à partir du client, et il accède à l’adresse IP publique de l’Application Gateway, cliquez sur ce journal pour afficher les détails. Sur le côté droit, les données figurant dans la zone inférieure sont celles qu’Application Gateway renvoie au client. Sélectionnez l’onglet « RAW » pour déterminer si le client reçoit le cookie « Set-Cookie: ApplicationGatewayAffinity=ApplicationGatewayAffinityValue ». S’il n’y a aucun cookie, cela signifie que l’affinité de session n’est pas activée ou qu’Application Gateway ne réapplique pas le cookie au client.
Remarque
Cette valeur ApplicationGatewayAffinity est l’ID de cookie qu’Application Gateway définit pour le client, à envoyer à un serveur back-end particulier.
Exemple B : Le prochain journal de session suivi par le précédent est le client qui répond à l’Application Gateway qui a défini la valeur ApplicationGatewayAffinity. Si l’ID de cookie ApplicationGatewayAffinity correspond, le paquet doit être envoyé au serveur back-end utilisé précédemment. Consultez les quelques lignes de communication HTTP suivantes pour voir si le cookie ApplicationGatewayAffinity du client a changé.
Remarque
Pour la même session de communication, le cookie ne devrait pas changer. Vérifiez la zone supérieure sur le côté droit, sélectionnez l’onglet « Cookies » pour voir si le client utilise le cookie et le renvoie à Application Gateway. Si ce n’est pas le cas, cela signifie que le navigateur client ne conserve et n’utilise pas le cookie pour les conversations. Parfois, le client peut mentir.
Étapes suivantes
Si les étapes précédentes ne vous permettent pas de résoudre le problème, ouvrez un ticket d’incident.