Varnish-cache est un reverse-proxy très léger, et parait il très performant , mis au point par le Sieur Poul-Henning Kamp, un des développeurs de la partie réseau de FreeBSD.

Varnish permet non seulement de décharger un ou plusieurs serveurs d’application web quel que soit le langage utilisé, mais il peut gérer un cache local très précis selon des critères assez complexes, ou encore diviser la page en plusieurs parties notamment grâce à la technologie Edge Side Includes.

Enfin, les règles mandataire de Varnish (écrites dans un micro-langage, le VCL), sont compilées en langage C par Varnish qui lance ensuite gcc pour obtenir un code natif, ce qui revient à dire que les règles de mise en cache ou de service que vous écrivez sont directement interprétées par votre reverse-proxy.

reverse proxy png

Voici l'url du Site officiel : http://varnish-cache.org/

Téléchargement :

Vous pourrez trouver la dernière version à cette url :

http://sourceforge.net/projects/varnish/files/

cd /opt/SOURCES
wget http://sourceforge.net/projects/varnish/files/varnish/2.0.6/varnish-2.0.6.tar.gz/download
tar xvzf varnish-2.0.6.tar.gz
cd varnish-2.0.6

Pré-requis :

Je n'ai pas rencontré de problème de dépendances mais il faut dire qu'il commence a y avoir pas mal de merdier sur mon serveur de test Varnish à besoin parait il de : libncurses Si vous en découvrez d'autres faites le nous savoir.

Installation :

Faites un petit ./configure --help pour voir les options.

mkdir /opt/varnish206
ln -s /opt/varnish206/ /opt/varnish
./configure --prefix=/opt/varnish --enable-stack-protector
make
make install

L'option : stack-protector est une protection en cas d'attaque DOS.

Configuration :

Retournez dans les sources vous devriez y trouver un répertoire redhat :

cd /opt/SOURCES/varnish-2.0.6/redhat

Copiez le fichier de configuration varnish.sysconfig :

cp -a varnish.sysconfig /opt/varnish206/etc/varnish/varnish.sysconfig
mv /opt/varnish/etc/varnish/varnish.sysconfig /opt/varnish/etc/varnish/varnish.cfg

Copiez le script d'init :

cp -a varnish.initrc /etc/init.d/
mv /etc/init.d/varnish.initrc /etc/init.d/varnish

Modifications du fichier de configuration default.vcl :

Éditez le et décommentez tout sauf les commentaire :)

vi /opt/varnish/etc/varnish/default.vcl

La petite partie :

backend default {
.host = "126.7.7.8";
.port = "8080";
}

sert à "dire" à Varnish sur quelle ip et quel port écoute le serveur web, le reste du fichier est le fameux langage Vcl.

Modifier le fichier d'init script pour qu'il colle bien à votre installation :

vi /etc/init.d/varnish

Voici les modifications que j'ai du effectuer :

# Source function library.
. /etc/init.d/functions

retval=0
pidfile=/var/run/varnish.pid

exec="/opt/varnish/sbin/varnishd"
prog="varnishd"
config="/opt/varnish/etc/varnish/varnish.cfg"
lockfile="/var/lock/subsys/varnish"

# Include varnish defaults
[ -e /opt/varnish/etc/varnish/varnish.cfg ] && . /opt/varnish/etc/varnish/varnish.cfg

Création de l'utilisateur et groupe :

adduser varnish

Modification pour les librairies :

vi /etc/ld.so.conf
ajouter : 
/opt/varnish/lib

Oubliez pas de charger les nouvelles librairies avec la commande : ldconfig

Démarrer Varnish :

service varnish start

qui devrait vous donner :

Starting varnish HTTP accelerator:                         [  OK  ]

Si vous rencontrez des problèmes avec le script d'init vous pouvez lancer varnish à la main :

exemple :

/opt/varnish/sbin/varnishd -a 0.0.0.0:80 -f /opt/varnish/etc/varnish/default.vcl -T 0.0.0.0:6082 -t 120 -w 1,1000,120 -u varnish -g varnish -s file,/opt/varnish/var/lib/varnish/varnish_storage.bin,1G

Tester l'installation avec l'interface d'admin :

telnet 127.0.0.1 6082

Tapez help pour avoir la liste des commandes disponibles, les plus intéressantes sont les suivantes :

status
stats

Si vous allez plus loin avec ce logiciel n'hésitez pas à partager vos découvertes.

Voici quelques pistes :

Schéma : Comment fonctionne Varnish

FAQ : Pas mal de trucs utiles

Autre : Article anglais