Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !

La plupart des outils de gestion de sites Internet, comme les CMS ou les solutions d’e-commerce peuvent intégrer dans leur architecture logicielle le composant Varnish pour cacher des pages ou des éléments de pages Web.

La gestion du cache Varnish est alors intégrée à l’outil. C’est à dire que l’outil va générer un en-tête du type TTL (expires ou autre) qui va permettre à Varnish d’appliquer la politique de cache de l’outil. Quand les éléments de sites contiennent des hash dans les URLs, généralement les TTL sont très grands (une année, voire plus). A chaque nouvelle version de cet élément l’outil va modifier le hash, et les utilisateurs pourront ainsi récupérer la nouvelle version sans qu’il n’y ait eu de purge de l’ancienne, puisque l’élément a un nouveau nom !

Dans le cas où les éléments ne changent pas de nom, la home page par exemple, ou des pages Web avec des permaliens, c’est l’outil qui va envoyer une requête de purge à Varnish (généralement une requête HTTP de type PURGE), qui va ainsi rafraîchir son cache et envoyer la nouvelle version.

Ces technologies sont relativement bien rodées sauf dans quelques cas où une extension ne gère pas le cache Varnish ou bien quand on insère dans blocs dans une page ou qu’on fait de l’ESI par exemple.

Dans ces cas, on peut toujours rafraîchir le cache Varnish en ligne de commande avec l’outil d’administration varnishadm ou bien en forgeant une requête de type PURGE, mais ces techniques dépassent souvent les permissions accordés aux webmestres ou leur compétences.

Il reste une solution assez simple d’utilisation, c’est de déclencher une purge Varnish quand l’utilisateur demande une version de la page qui ne provient pas du cache, c’est à dire avec le header HTTP « Cache-Control: no-cache »

C’est le header envoyé par les navigateurs quand on demande le rafraîchissement d’une page. Selon les OS et les navigateurs, le rafraîchissement s’obtient par les raccourcis claviers suivants :

  • Windows: Ctrl + F5
  • Mac: Command + Shift + R
  • Linux: Ctrl + Shift + R

Dans le livre Varnish 6 by example, il est écrit :
« How Varnish deals with Cache-Control
First things first: Varnish doesn’t respect the Cache-Control as a request header, only as a response header. »

Effectivement l’objectif de Varnish ce n’est pas que les utilisateurs contournent le cache et le vide sans arrêt. L’idée de la mise en place du rafraîchissement par un navigateur, c’est de filtrer les IP qui ont le droit de de procéder au rafraîchissement.

On trouve des articles des années 2010 sur Internet qui indiquent comment faire et qui proposent des élément de configuration des fichiers VCL de Varnish datant de Varnish 3 ou 4 :

Bref, quand on travaille sur Varnish 6 avec des CDN ou des proxy SSL type Nginx, on ne risque pas de faire fonctionner le rafraîchissement avec le code ci-dessus !

La configuration actualisée pour Varnish 6 serait du type :

Une fois cette configuration installée, on peut procéder à quelques tests !

…..