Accélérateur web Varnish
Varnish Cache est un accélérateur de site web (web application accelerator), aussi appelé "caching reverse proxy". Il s'installe devant un ou plusieurs serveurs web afin d'intercepter les requêtes HTTP et, si possible, fournir une réponse directement depuis son cache, sans devoir interroger les serveurs web.
Installation
Pour l'installer sur Ubuntu, il faut d'abord ajouter la clé du repository:
curl http://repo.varnish-cache.org/debian/GPG-key.txt > key.txt
sudo apt-key add key.txt
Il faut ensuite modifier le fichier /etc/apt/sources.list, et ajouter la ligne suivante:
deb http://repo.varnish-cache.org/ubuntu/ lucid varnish-3.0
Et finalement l'installer de manière classique:
sudo apt-get update
sudo apt-get install varnish
Configuration
Pour la configuration ci-dessous, Varnish est installé sur la même machine que le serveur web Apache. Varnish écoute sur le port 80, et Apache sur le port 8080.
Pour modifier les options de démarrage de Varnish, il faut modifier le fichier /etc/default/varnish:
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,256m"
- -a est le port sur lequel Varnish doit écouter
- -s indique le mécanisme à utiliser pour le cache, ainsi que sa taille (256MB dans l'exemple)
Il faut ensuite, dans le fichier /etc/varnish/default.vcl, indiquer à Varnish où se trouvent le ou les serveurs web. Dans ce cas-ci, il se trouve sur la même machine (127.0.0.1) et sur le port 8080:
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Par défaut, Varnish utilise une politique de mise en cache très prudente. Il ne met pas le contenu en cache si le browser envoie un cookie dans sa requête. Comme la plupart des sites utilisent les sessions et que le numéro de session est généralement stocké dans un cookie, le browser enverra le numéro de session pour chaque requête, donc également pour télécharger les images, fichiers vidéos, javascript, css,... ce qui empêche la mise en cache.
Pour forcer Varnish à mettre en cache le contenu statique, consultez Varnish : mettre en cache tout le contenu public.
Configurer Apache
Pour que Apache écoute sur le port 8080 au lieu du classique port 80, il faut d'abord modifier le fichier /etc/apache2/ports.conf:
NameVirtualHost *:8080
Listen 8080
Il faut ensuite modifier tous les virtual-hosts (tous les fichiers /etc/apache2/sites-enabled/...):
<VirtualHost *:8080>
...
Démarrage et test
On peut enfin redémarrer Apache, et démarrer Varnish:
sudo /etc/init.d/apache restart
sudo /etc/init.d/varnish start
Pour vérifier que Apache fonctionne correctement, il suffit d'ajouter :8080 dans l'url, par exemple http://mon.serveur.com:8080/ma/page.html
Varnish possède également plusieurs utilitaires pour tester son fonctionnement. Par exemple, pour savoir quelles URLs sont demandées par les clients au serveur Varnish:
varnishtop -i rxurl
Pour savoir quelles requêtes sont transmises par Varnish au serveur web (Apache):
varnishtop -i txurl