Installer et configurer le cache Varnish sur Debian
Varnish est un serveur de cache permettant d’accélérer le chargement des pages Web. Il est particulièrement adapté à l'optimisation de sites gérés par un Système de Gestion de Contenu (CMS).
Ce guide est testé sur:
- Debian 6.0 Squeeze
- Debian 7.0 Wheezy
Description de la configuration
Ce guide met en place une configuration de Varnish où chaque cluster est associé à un port d'écoute. À chaque ajout de cluster, un nouveau port d'écoute est ajouté. Connectez-vous au port d'écoute associé au cluster pour accéder au contenu de celui-ci.
La purge du cache est autorisée pour l'hôte local.
La configuration mise en place dans ce guide est testée avec les systèmes de gestion de contenu Plone (équipé du module plone.app.caching) et Wordpress (équipé de l'extension W3 Total Cache).
Installation
Paramètres
L'entête Accept-Language impacte le contenu du cache Varnish. Restreindre les languages à ceux disponibles sur les sites hébergés limite cet impact. Renseignez le language remplaçant les languages non supportés par les sites hébergés:
DEFAULT_LANGUAGE="en"
Renseignez exhaustivement les languages supportés par les sites hébergés (séparés par des espaces):
SUPPORTED_LANGUAGES="en fr"
Mise en place du serveur Varnish
Installez le logiciel nécessaire à la mise en place des dépots:
command apt-get install lsb-release
Ajoutez les dépôts de la dernière version du logiciel à la configuration apt:
command echo "# Varnish cache repository.
deb http://repo.varnish-cache.org/debian/ $(command lsb_release -s -c) varnish-3.0" \
> '/etc/apt/sources.list.d/varnish.list'
Ajoutez la clef publique de signature des dépôts à la configuration apt:
command wget "http://repo.varnish-cache.org/debian/GPG-key.txt" \
--quiet --output-document=- \
| command apt-key add -
Mettez à jour la liste des paquets disponibles:
command apt-get update
Installez le logiciel:
command apt-get install varnish
Assurez-vous que le serveur est arrêté:
/etc/init.d/varnish stop
Mettez en place le modèle de configuration:
command wget 'http://howto.biapy.com/fr/debian-gnu-linux/serveurs/http/installer-et-configurer-le-cache-varnish-sur-debian/varnish.vcl/at_download/file' \
--quiet --output-document='/etc/varnish/varnish.vcl'
Configurez le démon pour utiliser ce modèle:
command echo "
## Start Varnish with varnish.vcl configuration.
START='yes'
INSTANCE=\"\$(uname -n)\"
DAEMON_OPTS=\"-a :6081 \\
-T localhost:6080 \\
-f /etc/varnish/varnish.vcl \\
-S /etc/varnish/secret \\
-s malloc,256m \\
-s file,/var/lib/varnish/\${INSTANCE}/varnish_storage.bin,1G\"" \
>> '/etc/default/varnish'
Mise en place du filtre varnish-accept-language
Le filtre varnish-accept-language normalize l'entête Accept-Language pour minimiser l'impact de la langue de l'utilisateur sur le contenu du cache.
Installez les logiciels requis:
command apt-get install perl gcc make unzip
Téléchargez les sources du filtre:
command wget 'https://github.com/cosimo/varnish-accept-language/archive/master.zip' \
--no-check-certificate --output-document='/tmp/varnish-accept-language.zip'
Décompressez l'archive:
command unzip -d '/tmp' '/tmp/varnish-accept-language.zip'
Placez-vous dans le dossier obtenu:
pushd '/tmp/varnish-accept-language-master/'
Compilez le filtre:
command make DEFAULT_LANGUAGE="${DEFAULT_LANGUAGE}" SUPPORTED_LANGUAGES="${SUPPORTED_LANGUAGES}"
Install le fichier accept-language.vcl obtenu dans le dossier de configuration de varnish:
command cp "/tmp/varnish-accept-language-master/accept-language.vcl" '/etc/varnish/'
Quittez le dossier:
command popd
Supprimez le dossier et l'archive:
command rm -r '/tmp/varnish-accept-language-master/'
command rm '/tmp/varnish-accept-language.zip'
Configuration
Paramètres
Renseignez les adresses et IP des serveurs constituant le système de répartition de charge (liste de serveur:port, séparé par des espaces):
CLUSTER_SERVERS="127.0.0.1:8080 127.0.0.1:8081"
Mise en place
Détectez le premier port disponible pour la mise en place du cluster:
CLUSTER_PORT=6081
while [ -n "$(command grep "director cluster_${CLUSTER_PORT}" '/etc/varnish/varnish.vcl')" ]; do
CLUSTER_PORT=$((${CLUSTER_PORT} + 1))
done
Configurez le démon pour écouter sur le port:
if [ -z "$(command grep "^DAEMON_OPTS=" '/etc/default/varnish' \
| command tail -n 1 | command grep ":${CLUSTER_PORT}")" ]; then
command sed -i -e "s/-a[ \t]*/-a :${CLUSTER_PORT},/" '/etc/default/varnish'
fi
Créez la configuration du cluster associé au port:
if [ -z "$(command grep "director cluster_${CLUSTER_PORT}" '/etc/varnish/varnish.vcl')" ]; then
CLUSTER_CONFIGURATION="director cluster_${CLUSTER_PORT} round-robin {\\
"
for SERVER in ${CLUSTER_SERVERS}; do
SERVER_HOST="$(command echo "${SERVER}" | command cut --delimiter=':' --fields=1)"
SERVER_PORT="$(command echo "${SERVER}" | command cut --delimiter=':' --fields=2)"
CLUSTER_CONFIGURATION="${CLUSTER_CONFIGURATION} { .backend = { .host = \"${SERVER_HOST}\"; .port =\"${SERVER_PORT}\";\\
.probe = {\\
.url = \"/\"; .interval = 5s; .timeout = 1 s;\\
.window = 5; .threshold = 3; }\\
.connect_timeout = 600s; .first_byte_timeout = 600s;\\
.between_bytes_timeout = 600s;\\
} }\\
"
done
CLUSTER_CONFIGURATION="${CLUSTER_CONFIGURATION}}\\
"
command sed -i -e "/CLUSTER CONFIGURATION END/i\\
${CLUSTER_CONFIGURATION}" '/etc/varnish/varnish.vcl'
fi
Associez le cluster au port:
if [ -z "$(command grep "server.port == ${CLUSTER_PORT}" '/etc/varnish/varnish.vcl')" ]; then
command sed -i -e "/CLUSTER SELECTION END/i\\
if ( server.port == ${CLUSTER_PORT} ) {\\
set req.backend = cluster_${CLUSTER_PORT};\\
}\\
" '/etc/varnish/varnish.vcl'
fi
Rechargez la configuration du serveur:
/etc/init.d/varnish restart
Affichez le port du serveur utilisé pour héberger le cluster:
echo "## Use this port to access Varnish for the cluster:
${CLUSTER_PORT}"
Références
Ce livre peut vous aider:
Remerciements
- Merci aux développeurs de Varnish cache.
- Merci au Department of Engineering Science of university of Oxford pour Varnish setup.
- Merci à David Goodwin pour Varnish + Zope – Multiple zope instances behind a single varnish cache.
- Merci à binbash.fr pour Varnish 3 : booster le nombre de hits, Purger le cache de Varnish 3 et Varnish 3 : installation, Varnish 3 et le streaming : un cas d'usage.
- Merci à Nicolargo pour Booster votre blog WordPress avec Varnish.
- Merci à Evax software pour Optimiser la mise en cache d'un site Plone multilingue.
- Merci à Cosimo pour le filtre varnish-accept-language.
- Merci à John McLear pour WordPress Varnish Cache Config / VCL.
- Merci à Notes de PAD pour Configuration Varnish pour Wordpress.
- Merci à Enrise pour Varnish, the high performance valhalla ?
- Merci à Fitzdsl pour Testez la logique de cache de Varnish avec varnishtest.