« Varnish » : différence entre les versions

De Justine's wiki
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 6 : Ligne 6 :
Varnish utilise le VCL (Varnish Configuration Language) pour les confs de ses stratégies.  
Varnish utilise le VCL (Varnish Configuration Language) pour les confs de ses stratégies.  


== Installation ==
== Installation et test ==


L'installation se fait via:
L'installation se fait via:
Ligne 12 : Ligne 12 :
sudo apt install varnish
sudo apt install varnish
</source>
</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 ===
[https://www.varnish-software.com/wiki/content/tutorials/varnish/sample_vclTemplate.html Doc]
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 sites, 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.

Version du 16 septembre 2021 à 12:56

Varnish : Présentation

Documentation

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"
    1. 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

Doc

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 sites, 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.