2

Basculer facilement entre Apache et Varnish pour votre front-end

varnish cache

varnish cache

Le reverse proxy Varnish est l’accélérateur HTTP que j’affectionne le plus (cf le bandeau non-sponsorisé sur ma home). Ce serveur de cache placé en front d’un serveur Apache a des performances incroyables quand il s’agit de servir des pages générés dynamiquement par les plus grands CMS du marché (Drupal, WordPress & co).

Sa configuration est parfois compliquée, et plutôt que de laisser votre serveur dans les choux en cas de problème , il est préférable de pouvoir replacer Apache en front-end rapidement, je vous partage un script Shell qui fera ça très facilement!

Serveur HTTP versus Backend

Petite explication pour les novices: Quand vous lancez une requête HTTP en visitant une URL, ça se passe sur le port 80 (par défaut en HTTP). Vous appelez un serveur (via une résolution DNS) qui est à l’écoute sur le port 80, ça correspond à une application qui écoute sur ce port et vous retournera le fichier correspond à l’URL demandée.

En général c’est Apache qui se trouve en front, mais si vous installer un serveur de cache comme Varnish, c’est lui qui devra écouter sur le port 80 (en front) et transférer toutes les requêtes entrantes vers Apache (Backend). Il faut dans ce cas que le backend soit configurer sur un autre port (8080 par exemple) pour éviter les conflits:

Cela demande de modifier un certain nombre de fichiers:

– /etc/apache2/ports.conf pour le port d’écoute Apache
– /etc/apache2/sites-availables/* et toutes les hôtes virtuels Apache contenu dans ce répertoire
– /etc/default/varnish pour le port d’écoute Varnish
et arrêter puis redémarrer les services.

En cas de paramétrage de Varnish, la moindre erreur dans le fichier de config (qui sera compilé en C) plantera tous vos sites avec un beau :

Varnish Guru meditation

ou le serveur HTTP ne démarrera pas…

Dans ce cas là il faut mieux vite replacer Apache en front, quitte à ne pas avoir de cache mais à servir au moins du contenu les internautes 🙂 (vous savez le contenu, ce truc que Google adore^^).

Mais avec les différents fichiers à modifier et services à arrêter en cas de plantage de Varnish, mieux vaut être rapide pour faire cette manipulation, d’où ce petit script que je partage avec vous (vérifiez le juste par rapport à votre config, je ne veux pas être tenu responsable blablabla…).

Script de switch entre Apache et Varnish

Fonctionnement:

– Si Varnish est arrêté, il modifie les fichiers de config cités précédemment et lance le daemon Varnish sur le port 80 (Apache passe alors sur le port 8080)
– Si Varnish est lancé, il coupe le service, passe le serveur Apache sur le port 80 et redémarre le daemon Apache

#!/bin/sh
if /etc/init.d/varnish status > /dev/null;
then
echo "Varnish is running --> switching to Apache";
sed -i 's/DAEMON_OPTS="-a\ :80\ \\/DAEMON_OPTS="-a :8080\ \\/g' /etc/default/varnish
sed -i 's/NameVirtualHost\ \*:8080/NameVirtualHost\ \*:80/g' /etc/apache2/ports.conf
sed -i 's/Listen\ 8080/Listen\ 80/g' /etc/apache2/ports.conf
sed -i 's/<VirtualHost\ \*:8080>/<VirtualHost\ \*:80>/g' /etc/apache2/sites-available/*
/etc/init.d/varnish stop
/etc/init.d/apache2 stop
/etc/init.d/apache2 start
else
echo "Varnish not running --> switching to Varnish"
sed -i 's/DAEMON_OPTS="-a\ :6081\ \\/DAEMON_OPTS="-a\ :80\ \\/g' /etc/default/varnish
sed -i 's/DAEMON_OPTS="-a\ :8080\ \\/DAEMON_OPTS="-a\ :80\ \\/g' /etc/default/varnish
sed -i 's/NameVirtualHost\ \*:80/NameVirtualHost\ \*:8080/g' /etc/apache2/ports.conf
sed -i 's/Listen\ 80/Listen\ 8080/g' /etc/apache2/ports.conf
sed -i 's/<VirtualHost\ \*:80>/<VirtualHost\ \*:8080>/g' /etc/apache2/sites-available/*
/etc/init.d/apache2 stop
/etc/init.d/varnish start
/etc/init.d/apache2 start
fi

2 commentaires

  1. Bonjour Aymeric,
    Merci pour cette petite astuce. Je ne connais pas l’efficacité de Varnish mais d’après tous les retours, il semble très efficace. A t-on fait des études sur son efficacité ? (gain de temps moyen, pourcentage gagné…) Bien sûr, il existe d’autres techniques pour exploiter le cache mais j’aimerai bien le tester. J’espère que la configuration sera facile mais merci d’avoir partagé ce script. Après tout il faut se faire une idée soi-même.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *