Introduction Varnish

From Tuxunix
Jump to: navigation, search

Schema

VarnishInfo.jpg

Fonctionnement

mécanisme de cache

  • Varnish peut utiliser un cache mémoire ou un cache fichier.

Généralités

  • la taille de cache allouée dépend de la taille du contenu à mettre en cache.

Varnish utilise une IP et un port d'administration : permet à l'administrateur de passer des commandes d'administration sans arrêter le service ;

Varnish utilise une IP et un port d'écoute : le point d'entrée de l’application.

Toute la configuration se fait ensuite dans un fichier (default.vcl).

FAQ

  • vcl_recv => première étape d'une requête entrante, permet notamment de décider si le contenu doit être servi ou pas, et si oui comment (permet par exemple de forcer le cache ou de ne surtout pas cacher tel type de contenu).

Ex :

if (req.http.Host ~ "admin.domaine.com") {
               set req.backend = default;
               #Serveur d'admin, on ne cache pas
               return (pass);
}
if (req.request == "PURGE") {
       if (client.ip ~ monip) {
               return(lookup);
       }
}
  • vcl_fetch => quand une requête entrante sollicite un contenu qui n'est pas dans le cache, Varnish la passe au serveur cible, et cet intercepteur évènementiel permet de définir le comportement à appliquer au retour de ce contenu (permet par exemple de définir en fonction de certains éléments comme des cookies si on veut cacher ou pas le contenu).

Ex :

  • Cache 1 jours :
if (req.http.Host ~ "img.domaine.com" || req.url ~ "^/images/")
       {
               unset beresp.http.set-cookie;
               unset beresp.http.expires;
               set beresp.ttl = 1d;
}
  • Cache 1 minutes :

if (req.http.Host ~ "www.domaine.graph.com" && req.url ~ "^/graphs/")

       {
               unset beresp.http.set-cookie;
               unset beresp.http.expires;
               unset beresp.http.cache-control;
               set beresp.ttl = 1m;
       }
  • vcl_pass => cas où l'on renvoie la réponse au client sans passer par la vérification ni la mise en cache
  • vcl_hit => étape intermédiaire où l'on vient de trouver le contenu demandé dans le cache

Ex :

sub vcl_hit {
  if (req.request == "PURGE") {
    set obj.ttl = 0s;
    error 200 "Purged.";
   }
}
  • vcl_miss => étape intermédiaire où l'on ne trouve pas le contenu demandé dans le cache

Ex :

sub vcl_miss {

 if (req.request == "PURGE") {
   error 404 "Not in cache.";
 }

}

  • vcl_deliver => étape intermédiaire où l'on va renvoyer côté client le contenu remonté du cache

Ex :

sub vcl_deliver {

       if (obj.hits > 0) {
               set resp.http.X-Cache = "HIT";
               set resp.http.X-Cache-Hits = obj.hits;
               set resp.http.X-Cache-Backend = req.backend;
       } else {
               set resp.http.X-Cache = "MISS";
       }
       return (deliver);

}

  • vcl_error => étape intermédiaire où une erreur est survenue
  • Backend => le serveur Origine.

Ex :

backend default {
   #APACHE
   .host = "X.X.X.X";
   .port = "80";
   .connect_timeout = 1s;
   .first_byte_timeout = 21600s;
   .between_bytes_timeout = 21600s;
}
backend subdomain {
.host = "toto.domaine.com";
.port = "8001";
}
  • Loukup => Renvoie l'information caché.
  • Acl => Définie des autorisations IP

Ex :

acl adminpurge {
       "localhost";
       "X.X.X.X";
       "X.X.X.X";
}

Outils Varnish

VarnishTop

Outils qui permet d'afficher des statistiques, représentant les évènements de trace les plus récurrents par ordre d'importance.

ScreenVarnishTop.jpg

VarnishStat

  • Statistique sur le nombre de requêtes, le nombre de requêtes envoyées depuis le cache, le nombre de requêtes envoyées au backend, etc...

ScreenVarnishStats.jpg

VarnishLog

  • Accès aux logs détaillé de Varnish.

ScreenVarnishLog.jpg


  • IMPORTANT : A la troisième colonne, le "b" signifie Backend et le "c" Client.

Redirige les logs dans un fichier

$ varnishlog -w /var/log/varnish.log

Affiche les logs des requêtes uniquement

$ varnishlog -r /var/log/varnish.log -c -m 'RxURL:^/$'

Afficher les erreurs 503

$ varnishlog -c -m TxStatus:503

VarnishHist

  • Affiche un histogramme temps réel (en secondes) qui indique le temps mis par Varnish pour desservir le contenu, qu'il provienne du cache ou non.

ScreenVarnishHist.jpg