Salut à tous !
J'ai une question pour laquelle je ne trouve aucun exemple concernant nginx et la gestion des erreurs, en l'occurrence l'erreur HTTP 502 (Bad Gateway) et l'erreur HTTP 503 (service unavailable).
Dans les faits voici ce que je souhaite faire :
Je possède un serveur dédié sous proxmox sur lequel je sous loue des conteneurs LXC. Chaque conteneur est joignable depuis un conteneur qui sert de proxy (nginx) via les adresses ip locales (192.168.x.x).
Sur ces conteneurs, les propriétaires mettent principalement des sites web sous apache ou nginx. Donc chaque requête http/s est transmises au conteneur qui fait office de proxy (nginx) et ce dernier réattribue au bon conteneur via le server_name. Jusque là tout va bien.
Le problème est que certains propriétaires souhaitent éteindre leur conteneur à heure fixe (par exemple entre 00h et 8h) afin de limiter la consommation de ressources inutiles. Seulement, en faisant ça, cela lève une 502 (ce qui est le comportement normal). Le proxy (nginx) est mis à contribution, il tente de joindre l'ip locale définie dans le vhost et au bout du timeout, comme pas de réponse, il lève une 502 (comportement tout à fait normal ou alors mon proxy fait n'importe quoi).
Maintenant, dans ce genre de cas, il me faut lever une 503 et non une 502. Pourquoi ? parce que cette coupure est volontaire donc nous affichons une page de maintenance (que le proxy nginx gère) et selon certaines sources, renvoyer une 502, impact le SEO contrairement à une 503 (enfin c'est peut être une légende, cela dit certaines docs vont dans ce sens donc ..).
Du coup dans nginx pas de problème, j'ai pu gérer le fait de lever une 503 au lieu d'une 502, comme suit :
server {
server_name xxx.yyy;
location / {
proxy_pass https://192.168.x.x/;
}
error_page 502 =503 /503.html;
location = /503.html {
root /var/www/vhost/;
internal;
}
[...]
Le problème qui se pose en faisant comme ça c'est que si apache plante à l'intérieur du conteneur, cela me lève la 503 et donc affiche la page "503.html". Alors que je souhaiterai que cela me lève une 502 😆.
Je cherche donc un moyen de distinguer ces deux états :
1/ conteneur lxc éteint, la requête http/s n'about pas, le conteneur ne répond pas au ping, nginx lève une 503 car c'est surement la page 503.html que l'on veut afficher
2/ conteneur lxc allumé, la requête http/s n'aboutit pas, le conteneur répond au ping, on lève une 502 car on ne souhaite pas afficher la page 503.html
Si vous avez des questions parce que mon histoire n'est pas claire, ne surtout pas hésiter 🙂.
Merci à celles et ceux qui auront lu mes doléances 🙂 et merci par avance pour votre contribution.