Vous êtes ici : Accueil / Debian GNU/Linux / Serveurs / HTTP / Installer et configurer le cache Varnish sur Debian

Installer et configurer le cache Varnish sur Debian

Par Pierre-Yves Landuré Dernière modification 11/11/2017 09:45

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

Pièces jointes