« Varnish » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 126 : | Ligne 126 : | ||
La configuration de Varnish est assez complexe et mal documentée :( | La configuration de Varnish est assez complexe et mal documentée :( | ||
Il doit aussi être possible d'avoir un seul Varnish pour plusieurs | Il doit aussi être possible d'avoir un seul Varnish pour plusieurs servs, et de faire plusieurs backends sur lesquels on redirige en fonction d'ACL. Mais je lâche l'affaire pour l'instant. | ||
=== Commandes d'administration === | === Commandes d'administration === |
Version du 16 septembre 2021 à 13:42
Varnish : Présentation
Varnish est un reverse proxy pour le web servant de cache. Il reçoit des requêtes des clients et tente de leur répondre depuis le cache; si il n'y parvient pas, il forwarde la requête vers le backend, récupère la réponse et la garde en cache. Les réponse qu'il fournit depuis son cache sont très rapides. Il décide si il doit stocker la réponse ou non quand elle vient du backend; pour cela il utilise l'en-tête HTTP Cache-Control. Il y'a certaines choses qui ne vont pas en cache, comme les cookies.
Varnish utilise le VCL (Varnish Configuration Language) pour les confs de ses stratégies.
Installation et test
L'installation se fait via: <source> sudo apt install varnish </source>
Nous allons ensuite activer Varnish:
<source> systemctl enable varnish systemctl start varnish </source>
Puis tester son fonctionnement. Par défaut, Varnish sert sur le port 6081 ce qu'il trouve en local sur le port 8080. Je vais donc démarrer un serveur http.server avec Python (après avoir créé un fichier index.html avec du texte dedans):
<source> echo "test" >> index.html python3 -m http.server 8080 </source>
En allant sur l'IP de mon serveur et sur le port 6081 avec un navigateur, je vois ma page. Ça fonctionne !
Configuration
Backend par défaut
Je peux changer de port pour le backend si je le souhaite. Il faut éditer /etc/varnish/default.vcl et modifier la section suivante :
<source> vcl 4.0;
backend default {
.host = "127.0.0.1"; .port = "8080";
} </source>
Je peux changer l'hôte et le port. Je teste avec mon wiki:
<source> backend default {
.host = "wiki.ju.lab"; .port = "80";
} </source> ...et ça marche bien (après un reload de varnish).
Paramètres du daemon
On peut avoir les options du daemon avec man varnishd.
Changer le port de Varnish
On va configurer Varnish pour qu'il tourne sur le port 80.
Je commence par arrêter Varnish: <source> systemctl stop varnish </source>
!LEGACY! Puis j'ouvre /etc/default/varnish (Debian) et je modifie le bloc suivant : <source> DAEMON_OPTS="-a :6081 \
-T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s default,256m"
- Vers
DAEMON_OPTS="-a :80 \
-T localhost:6082 \ -f /etc/varnish/default.vcl \ -S /etc/varnish/secret \ -s default,256m"
</source>
!RECENT! La documentation recommande pour Debian 8+ / Ubuntu 15+ de créer /etc/systemd/system/varnish.service.d/customexec.conf (/etc/sysconfig/varnish pour RHEL), puis d'y mettre: <source> [Service] ExecStart= ExecStart=/usr/sbin/varnishd -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s default,256m </source> Pour cela, il faut d'abord créer le dossier : mkdir /etc/systemd/system/varnish.service.d. ...puis systemctl daemon-reload et restart de varnish.
Chez moi, ça ne fonctionne pas, mais la ligne suivante fonctionne: <source> [Service] ExecStart= ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s default,256m </source> La différence:
- -j <jail[,jailoptions]>: Specify the jailing mechanism to use.
- -F: Do not fork, run in the foreground.
RAM allouée
Dans la configuration ci-dessus, la mention <source> -s default,256m </source> contrôle la quantité de RAM allouée. Je peux remplacer 256m par autre chose. Le default signifie que l'on utilise le storage backend par défaut (si j'ai bien compris).
Backends
Je vais repasser la conf de /etc/varnish/default.vcl à ce qu'elle était à la base: <source> vcl 4.0;
backend default {
.host = "127.0.0.1"; .port = "8080";
} </source>
Je pourrais me contenter de mettre un cache Varnish par site web, et ça fonctionnerait bien comme ça, par exemple:
- HaProxy reçoit les requêtes (et gère le SSL) sur 443 / 80, redirige sur :
- Varnish qui écoute sur 80, qui redirige sur
- Apache / Nginx qui écoute sur 8080.
La configuration de Varnish est assez complexe et mal documentée :(
Il doit aussi être possible d'avoir un seul Varnish pour plusieurs servs, et de faire plusieurs backends sur lesquels on redirige en fonction d'ACL. Mais je lâche l'affaire pour l'instant.
Commandes d'administration
Varnishadm
Varnish a une cli d'administration: <source> varnishadm </source> ...mais ma doc ne dit rien de son fonctionnement
Varnishlog
Varnish ne logue pas dans un fichier, on peut voir ses logs avec la commande varnishlog.