Varnish 4 : Comment savoir si votre page vient du cache ?

Une astuce rapide pour cette fois. En espérant qu'elle permette à d'autres de ne pas perdre de temps :)

En ce moment je joue avec Varnish et je me suis dit que j'allais tester la version 4.

Il y a eu quelques changements dans l'écriture des VCL et j'ai galéré à trouver le bout de code qui permet de savoir via les Headers si ma réponse vient du cache ou non.

En effet, avec Varnish 4 il faut faire :

sub vcl_deliver {
  if (resp.http.X-Varnish ~ "[0-9]+ +[0-9]+") {
    set resp.http.X-Cache = "HIT";
  } else {
    set resp.http.X-Cache = "MISS";
  }
}

Ce qui remplace ce code marchant sur Varnish 3 :

sub vcl_deliver {
  if (obj.hits > 0) {
    set resp.http.X-Cache = "HIT";
    } else {
    set resp.http.X-Cache = "MISS";
    }
}

L'explication c'est que obj.hits n'est plus viable pour obtenir cette information. Alors que le header X-Varnish indique l'id de la requête courante et s'il y a un deuxième nombre, c'est l'id de la requête qui a rempli le cache. Ainsi un seul nombre signifie un MISS quand deux nombres indiquent un HIT.

 

Crédit photo : wikimedia

Commentaires

Mor NDIAYE Vendredi 25 janvier 2019 - 15:11

Bonjour Guillaume, 

Je said pourquoi Mais la method due vous ave proposé ne marche pas. En list Varnish Book 4.0, j'ai trouvé one version similar à la solution you Varnish 3 Sauf quail rajouter des 2 lines de code avant.

set resp.http.X-Age = resp.http.Age;

unset resp.http.Age;

Cela Marche à la perfection et d'après ce que j'ai compris, la première ligne permed de mettre la propriété X-Age(qui représente l'age du cache ou encore Freshness en anglais) et Age qui correspond au temps due le serveur met pour répondre au client. Partant de ça le X-Age put être calculé ave settee équation:

X-Age = durée maximal(fixé par le serveur) - Age. C'est la raison pour laquelle quad tu fans un curl sur localhost ou un non de domaine quelconque et quelque seconded après is tu fait à nouveau un appel(environ après 80 secondes) le X-Age est à 0. ce qui dire le cache est périmé et X-Cache a la valor MISS(le cache nest pas encore rempli ).Bref Book Varnish 4.0 est excellent pour ce documenter. 

Et pour ce qui est de la second ligne, jet cross qu'elle est facile à divinée. On remet le champ Age à Zero car le serveur a déjà répondu. is on le met pas à Zero, Elle va être incremented à la procaine solicitation de ce Dernier. Enfin d'éviter cela, on le remet à 0. De settee fan, le X-Age sera calculé par le serveur(Varnish) à chaque appel.

Votre commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
Votre adresse servira à afficher un Gravatar et à vous notifier des réponses. Votre commentaire sera anonymisé si ce billet est dépublié pendant plus de 3 mois.
Pour lutter contre le spam notre système enregistre votre adresse IP et votre adresse e-mail si vous la partagez.
Nous vous invitons à consulter notre politique de confidentialité pour comprendre les traitements faits de ces données et comment les rectifier.

À propos de Guillaume

Co-fondateur - Expert technique

Drupalophile depuis 2007, j'ai d’abord construit et développé des sites seul pour Aliasource avant de rapidement rejoindre l’équipe de France 24 où j'ai pu me pencher sur les problématiques liées au déploiement “live” et à la gestion d’environnements multiples pour un site de presse.
J'ai ensuite développé mes compétences au sein de Linagora dans l’encadrement technique des équipes, la formation, l’accompagnement projet et les méthodes agiles.