[ Linux ] Gérer facilement vos maintenances

 dans CMS, Dokuwiki, Drupal, Linux, Serveur, WordPress

Hello !

Petit article rapide (mais qui peut-être intéressant) sur la gestion facile de vos maintenances avec Apache et un htaccess. Le but étant de rediriger tout le trafic vers une page de maintenance dédiée, ici nous mettrons en place la page « maintenance.html » en statique, ce qui permettra de faire des updates sur pool PHP-FPM sans risque (enfin pour vos visiteurs). La configuration sera gérée dans le fichier htaccess, il doit donc être pris en charge par le vhost (la valeur du AllowOverride doit être à All). Pour l’activation de la maintenance, vous devrez déposer un fichier « maintenance.enable » à la racine du site, même s’il est vide.

 

Configuration du vhost

Pour que le htaccess soit bien pris en compte, il faut bien avoir le AllowOverride défini à All.
Si ce n’est pas le cas, il faudra faire la modification dans le vhost et recharger Apache (un graceful suffira).

 

Création de la page de maintenance

Dans cet article j’ai décidé de prendre la page « maintenance.html » car c’est un nom relativement standard pour une maintenance, vous pouvez toujours lui donner un autre nom mais il faudra adapter le reste de l’article avec la bonne page 🙂

La page est très simple, à vous de la personnaliser à vos besoins :

<! DOCTYPE html>
<html>
<head>
<title>MAINTENANCE</title>
<meta http-equiv=’Content-Type’ content=’text/html; charset=UTF8′>
<style>
h1 { font-size: 50px; }
body { text-align: center; police: 20px Helvetica, sans-serif; color: #333; }
</style>
</head>
<body>
<h1>MAINTENANCE</h1>
<p>Le site est actuellement en maintenance. Désolé de la gène occasionnée, nous revenons rapidement !</p>
</body>
</html>

Vous pouvez tester l’accès directe à la page pour voir si le rendu vous plait ! 🙂

 

Configuration du htaccess

Maintenance il faut ajouter quelques lignes dans le fichier htaccess (.htaccess), si vous êtes dans un terminal (SSH) n’oubliez pas que le fichier est caché. Ci-dessous la configuration à mettre en place :

<IfModule module_rewrite.c>
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$
RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|jpeg|png|js)$
RewriteCond %{DOCUMENT_ROOT} /maintenance.html -f
RewriteCond %{DOCUMENT_ROOT} /maintenance.enable -f
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
RewriteRule ^(.*)$ /maintenance.html [R=503,L]
ErrorDocument 503 /maintenance.html
Header Set Cache-Control ‘max-age=0, no-store’
</IfModule>

Top ! Passons à la suite avec les explications (c’est mieux non ?) 🙂

Quelques explications

Faire du copier/coller, c’est bien mais comprendre son fonctionnement c’est beaucoup mieux !

RewriteEngine On
=> permet d’activer le mode redirection

RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000$
=> cette condition match votre adresse ip, elle permettra de by-passer la page de maintenance
=> vous pouvez mettre plusieurs lignes de ce type

RewriteCond %{REQUEST_URI} !\.(css|gif|jpg|jpeg|png|js)$
=> pour ne pas prendre en compte les fichiers statiques si vous en avez besoin

RewriteCond %{DOCUMENT_ROOT} /maintenance.html -f
=> permet de vérifier que la page maintenance.html existe bien, c’est mieux si on redirige notre trafic vers elle

RewriteCond %{DOCUMENT_ROOT} /maintenance.enable -f
=> permet de vérifier que la page maintenance.enable existe bien, sinon la condition ne sera pas OK et la redirection vers la maintenance non plus

RewriteCond %{SCRIPT_FILENAME} !maintenance.html
=> pour éviter les boucles de redirection

RewriteRule ^. * $ /maintenance.html [R = 503, L] ErrorDocument 503 /maintenance.html
=> génère la redirection vers la page de maintenance avec un code d’erreur 503 (Service Unavailable)

Header Set Cache-Control ‘max-age=0, no-store’
=> un leader pour éviter la mise en cache (navigateur, proxy-cache, reverse-proxy-cache)

 

Activation et Désactivation de la maintenance

Vous l’aurez sans doute compris, pour activer la maintenance il faudra créer un fichier « maintenance.enable » à la racine du site (DocumentRoot). Pour supprimer la maintenance, le principe reste le même, vous supprimez le fichier. Simple non ?

Je vous invite à proposer cette méthode à vos clients, plus simple/pratique à gérer (attention cependant au monitoring, le mieux étant de rajouter le mot recherché dans la page de maintenance). Voilà ! 😛

Désolé pour la mise en forme des configurations, disons que WordPress ne gère pas très bien cette partie avec ma configuration (et la flemme de chercher le problème pour le pitcher). Peut-être qu’il y aura des problèmes/erreurs sur les simples/doubles quotes qui sont différentes sur WordPress. Bref si vous avez des petits bugs, vous savez ou chercher ! 🙂

Articles recommandés