Les bases de varnish

Je ne vais pas reprendre la description de varnish, plusieurs blogs le font trĂšs bien. Ce que j'en retiens c'est que varnish est un serveur de "cache" permettant de dĂ©charger un serveur en enregistrant les rĂ©ponses de certaines requĂȘtes et en les servant directement au client quand elles se reprĂ©sentent (cache). La principale difficultĂ© est de le configurer correctment pour garder le cache le temps nĂ©cessaire et pouvoir le forcer de se mettre Ă  jour si une donnĂ©e est changĂ©e cĂŽtĂ© serveur.

Il a bien entendu d'autres fonctionnalitĂ©s (comme nettoyer les requĂȘtes avant d'interroger le serveur) mais je me concentre sur la principale : le cache.

Fonctionnement simplifié

Le fonctionnement de varnish se fait en 3 Ă©tapes.

  1. RĂ©ception de la requĂȘte du client (varnish crĂ©Ă© une clef unique correspondant Ă  la requete)
  2. Recherche de la requĂȘte dans le cache (la clef unique), s'il la trouve il renvoie la rĂ©ponse enregistrĂ©e (si elle est encore valide c'est Ă  dire que son temps de cache n'a pas expirĂ©)
  3. Si pas trouvé, varnish va interroger le serveur, retourner la réponse au client et la sauvegarder dans son cache.

Ce fonctionement est bien entendu simplifiĂ© car varnish fait d'autres actions avant de vĂ©rifier le cache (si prĂ©sence d'un cookie il ne sert pas le cache) et la sauvegarde (il vĂ©rifie si la configuration autorise de sauvegarde la rĂ©ponse pour la requĂȘte).

schéma simplifié

Niveau "termes techniques", un HIT correspond Ă  une requĂȘte qui a Ă©tĂ© trouvĂ©e en cache, un MISS, une requĂȘte non attrapĂ©e par varnish et dĂ©livĂ©e directement au serveur.

Configuration

Varnish va appeler les fonctions suivantes dans l'ordre du schéma. process et fonctions

exemples

Si on dĂ©tecte un cookie, un header de rĂ©ponse est settĂ© et la fonction retourne hitforpass qui veut dire qu'on demande Ă  varnish de passer la requĂȘte alors qu'elle pouvait etre mise en cache (les prochaines requetes seront du coup directement passĂ©es au serveur).

if (header.get(beresp.http.set-cookie,"TestCookie=") ~ "TestCookie")
 {
     set beresp.http.cookie-test = 1;
     return(hit_for_pass);
 }

Commandes utiles

varnishadm permet d'afficher l'interface d'administration, permettant (entre autres) de rafraichir la configuration varnish "Ă  chaud" varnishlog -q 'ReqURL ~ "^/$"’ Liste toutes les requĂȘtes reçues par varnish (varnish log les requetes du client = REQ et les rĂ©ponse du serveur = RESP)

vcl.load newconfig03 /etc/varnish/default.vcl
vcl.use newconfig03
quit
500
Closing CLI connection

Permet de recharger à "chaud" la configuration de varnish (qu'il faut stoquer dans un nom de configuration , ici newconfig03); vcl.discard <configname> permet de supprimer les fichiers de configurations (si non utilisés)

Liens utiles

http://book.varnish-software.com/3.0/VCL_Basics.html https://info.varnish-software.com/blog/10-varnish-cache-mistakes-and-how-avoid-them