Temps de lecture estimé : 2 minutes
Quand nous subissons des erreurs HTTP, il est quand même plus agréable d’avoir des pages « corporate » plutôt que les tristes pages blanches avec un gigantesque 4xx / 5xx. Cela permet de mieux informer l’utilisateur final de ce qu’il s’est passé et ce qu’il peut faire pour gérer le cas. Habituellement, c’est le rôle du serveur web de délivrer ces pages d’erreurs. Mais quand il n’y a plus de serveur web pour fournir la moindre page, comment fait-on ?
C’est la colle qu’on m’a posé il y a peu : HAProxy doit afficher une 503 avec la charte graphique de l’entreprise… pour dire qu’il n’y a pas de serveur applicatif disponible !
Il se trouve qu’HAProxy stocke des pages d’erreurs et nous permet, soit de les altérer, soit d’en utiliser d’autres. Voyons comment ça se configure dans le fichier de configuration :
# haproxy.cfg
# [...]
http-errors myerrors
errorfile 503 /path/vers/mon/fichier/503.http
frontend ft_app
bind *:80
errorfiles myerrors
default_backend bk_app
backend bk_app
default-server port 80 check
server mybackend 127.0.0.99 disabled
# [...]
Ledit fichier d’erreur est une combinaison d’instructions HTTP et de HTML :
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html
<html><body><h1>503 Service Unavailable</h1>
No server is available to handle this request.
</body></html>
Ce que la documentation officielle ne dit pas, c’est comment avoir un rendu web user-friendly ; si vous avez essayé, vous savez que les images et le CSS ne chargent pas.
Avant tout, il faut comprendre qu’HAProxy n’est pas un serveur web, il ne peut donc pas localiser de fichiers sur son système de fichiers. Nous avons donc deux choix possibles :
Notre fichier devient donc :
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html; charset=utf-8
<html>
<head>
<style>
body { color: #555; background-color: #eee;}
h1 { color: #ba181a;}
</style>
</head>
<body>
<h1>Service indisponible (503)</h1>
<p><img src="https://redwatch.io/img/logo-WEB.png" alt="logo" />
<p>Aucun serveur ne peut gérer cette requête.</p>
</body>
</html>
Vous savez désormais comment afficher des messages « propres » côté HAProxy !
Comme d’habitude, vous pouvez retrouver le code pour essayer par vous-même sur le dépôt d’exemple.
Sources :
Ce billet vous a plu ? Partagez-le sur les réseaux…
… Ou inscrivez-vous à la newsletter pour ne manquer aucun article (Si vous ne voyez pas le formulaire, désactivez temporairement uBlock).