2 votes

Varnish : comment ajouter une exception pour les pages dynamiques avec cookies ?

J'aimerais savoir quelle est la bonne façon d'éviter de mettre en cache "certaines pages" d'un site web en utilisant Varnish et de mettre en cache toutes les autres.

C'est ce que j'ai essayé de faire avec la conf vcl :

     sub vcl_fetch {
         #set beresp.ttl = 1d;
         if (!(req.url ~ "/page1withauth") ||
             !(req.url ~ "/page2withauth")) {
            unset beresp.http.set-cookie;
         }
         if (!beresp.cacheable) {
             return (pass);
         }
         if (beresp.http.Set-Cookie) {
             return (pass);
         }
         return (deliver);
}

Remerciements

5voto

BMDan Points 7059

En règle générale, cette opération est effectuée dans vcl_recv :

sub vcl_recv {
  if ( req.url !~ "^/page1withauth" && req.url !~ "^/page2withauth" )
  {
    unset req.http.Cookie;
    remove req.http.Cookie;
  }
}

Ainsi, le seul moment où le serveur doit renvoyer un paramètre set-cookie est celui où vous essayez d'identifier la connexion de manière unique. Si c'est parce qu'ils viennent de faire un POST ou quelque chose de similaire, cela va déjà échapper au cache. Si c'est parce que vous voulez simplement les identifier de manière unique, alors le problème est que le code de votre application brise intentionnellement Varnish ; corrigez votre application si vous le pouvez, sinon vous pouvez surcharger vcl_fetch comme vous le faites ici.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X