Ce tutoriel simple vous guide dans la configuration de Varnish cache afin de le faire fonctionner correctement avec systemd, sur Debian Jessie.
/etc/systemd/system/varnish.service
Ce tutoriel simple vous guide dans la configuration de Varnish cache afin de le faire fonctionner correctement avec systemd, sur Debian Jessie.
/etc/systemd/system/varnish.service
Varnish peut cacher les données en mémoire et/ou sur disque.
On peut donc lui dire qu’on lui alloue 512Mo de mémoire pour cacher et aussi 95% de l’espace libre d’une partition en ajoutant les paramètres ci-dessous :
-s malloc,512M \
-s file,/var/lib/varnish/varnish_storage.bin,95%
Varnish a aussi par défaut, un cache en mémoire pour les objets de courte durée, ce cache n ‘a pas de limite par défaut, ce fonctionnement par défaut peut donc faire swaper et cracher votre serveur (ou le mien 🙂 ) {.warning}
[Lire]
Voici un exemple de condition à ajouter dans votre vcl recv pour protéger un dossier d’un site :
if (req.http.host == "le.domaine.a.proteger.ltd" && req.url ~ "^/l/uri/a/proteger" && (req.http.referer && req.http.referer !~ "^http://le.domaine.a.proteger.ltd/")) {
error 403 "No hotlinking please";
}
Remplacer :
Pour mettre en place le même type de protection via apache, voir cet article : Un htaccess pour les pompeurs de sites dans lequel est expliqué comment procéder avec des règles de réécriture Apache
[Lire]La documentation Varnish parle de loadbalancing aléatoire et Round Robin, mais n’indique pas comment loadbalancer en conservant les sessions
La configuration ci-dessous ne se base pas sur les IP sources mais sur un cookies pour identifier un client
backend serveur1 {
.host = "192.168.0.1";
.port = "80";
}
backend serveur2 {
.host = "192.168.0.2";
.port = "80";
}
director member client {
{
.backend = serveur1;
.weight = 1;
}
{
.backend = serveur2;
.weight = 1;
}
}
Dans vcl_recv définissez sur quoi doit se baser Varnish pour définir “l’identité” du client set client.identity = req.http.cookie;
Comme nous l’indique ops42 dans son article http://ops42.wordpress.com/2012/11/14/varnish-is-smarter-than-you/. pdf de la page qui n’existe plus 🙁 , Varnish fonctionne très bien avec sa configuration “built-in”.
Au fur et à mesure, beaucoup de sysops (comme moi) ont mis en place, à tord, des configurations Varnish de plus en plus complexe.
La seule configuration à mettre en place est celle lié à vos backends
Toutes modification des VLC sera donc un hotfix pour corrigé un problème lié a votre application.
[Lire]Le but de cette configuration est de simplifier au maximum la mise en place de Varnish.
Avant d’appliquer la configuration a votre Varnish, vous devez éditer le fichier backend.vcl pour configurer votre backend.
Cette configuration reste minimaliste et utilise la configuration " builtin " qui fonctionne très bien à conditions que les RFC soient respecté.
Le script va parser l’xml du site pour avoir la liste des pages, puis y accéder Suivant le script que vous allez utiliser, les dépendances des pages seront requeter ou non.
[Lire]Lorsque Nginx est placé derrière un reverse proxy, celui ci avec une configuration de base logera L’IP des visiteur avec celle du reverse proxy et non avec L’IP des visiteurs.
Cela peut poser des problèmes par exemple dans le cas ou vous utilisez Akismet comme anti-spam pour vos commentaires.
Pour cela, dans varnish ajouter après
sub vcl_recv {
la ligne
set req.http.X-Forwarded-For = client.ip;
puis dans la configuration Nginx, dans la configuration http, ajouter
[Lire]Dans cet article, uniquement les spécificité de configuration pour Drupal seront indiqué
Dans la vcl_recv, on nettoie les cookies si vous ne l’avez pas déjà fait :
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[a-z]+|has_js)=[^;]*", "");
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
if (req.http.Cookie ~ "^\s*$") {
unset req.http.Cookie;
}
On spécifie ce qu’il faut cacher, ou pas :
if (req.url ~ "^/sites/") {
unset req.http.Cookie;
}
if (req.url ~ "^/misc/") {
unset req.http.Cookie;
}
if (req.url ~ "^/modules/.*\.(js|css)\?") {
unset req.http.Cookie;
}
if (req.url ~ "cron.php") {
return (pass);
}
Pour cela, il faut :
curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -
echo "deb http://repo.varnish-cache.org/debian/ $(lsb_release -s -c) varnish-3.0" >> /etc/apt/sources.list.d/varnish.list
apt-get update
apt-get install varnish```
# Activation de varnish et configuration du port 80 a la place du port 6081
```sh
sed -i "#START#s#no#yes#" /etc/default/varnish-
sed -i "s#-a :6081#-a :80#" /etc/default/varnish
sed -i "s#/etc/varnish/default.vcl#/etc/varnish/production.vcl#" /etc/default/varnish
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Appelé au début d’une requête, après que la requête complète est été reçue et analysée.
[Lire]