9 10 2015
Azure: Erreur 502 avec Azure Application Gateway
Lorsque vous utilisez Azure Application Gateway, vous obtenez l’erreur 502: Web server received an invalid response while acting as a gateway or proxy server.
Dans Azure, lorsque vous souhaitez faire du Load-Balancing, il existe plusieurs possibilités:
- External Load-Balancing (L4);
- Internal Load-Balancing (L4);
- Azure Traffic Manager (plus ou moins L4);
- Azure Application Gateway (L7);
- Les Load-Balanceurs du marketplace (Kemp…).
L4, L7, c’est quoi ?
Pour les passionés de l’automobile, ce n’est ni un 4 cylindres en ligne, ni un 7 cylindres en ligne ! Il s’agit de la couche OSI sur laquelle va intervenir le load-balancer.
- L4: Le load-balancer agit au niveau TCP/IP;
- L7: Le load-balancer agit au niveau applicatif.
Dans le cas qui nous intéresse, Azure Application Gateway permet de faire du load-balancing HTTP/HTTPS avec le l’offloading SSL et surtout la gestion des sessions utilisateurs (qui va rediriger l’utilisateur toujours sur le même serveur grâce à un cookie).
Erreur 502: Bad Gateway
J’ai deux serveurs IIS configurés de la même manière. Lorsque je me connecte depuis mon navigateur, j’obtiens le message suivant:
502 – Web server received an invalid response while acting as a gateway or proxy server.There is a problem with the page you are looking for, and it cannot be displayed. When the Web server (while acting as a gateway or proxy) contacted the upstream content server, it received an invalid response from the content server. |
Si j’utilise un External Load-Balancer (L4), je n’ai pas le même problème.
Bindings dans IIS
Après avoir testé plusieurs configurations de l’Azure Application Gateway (30min pour démarrer la gateway à chaque fois), j’ai regardé du côté des bindings de mon site IIS.
Configuration classique. Toutefois non compatible avec Azure Application Gateway.
Azure Application Gateway s’appuye sur IIS Application Request Routing 2.5 (ARR). Hors, dans sa version publique, ARR nécessite qu’on lui ajoute des règles afin de permettre la redirection vers les différents sites dans IIS. Vous trouverez une vidéo explicative de Scott Forsyth à ce sujet ici: ARR Binding Trick Week 36.
Pour résoudre le problème, il suffit juste de laisser le Host Name vide dans notre binding:
Et il est enfin possible d’accéder au site-web sans problème !
Impacts
Le problème de cette solution, c’est qu’il n’est pas possible d’héberer plusieurs sites web sur la même ferme de serveurs Web, dans Azure, en attendant que le service supporte les binding tout du moins. J’en ai fais la suggestion sur le site Azure Feedback: Allow IIS Hostname binding support in Azure Application Gateway. N’hésitez pas à voter pour cette fonctionnalité !
WS2016: Lancer la console Server Manager en CMD Support multisite dans Azure Application Gateway
[…] sites sur une même ferme de serveurs “classiques”, vous ne pouvez pas utiliser Azure Application Gateway sans avoir une erreur 502. Il faut alors se tourner vers des appliances virtuelles de load-balancing beaucoup plus évolués […]