Voila une configuration destinée à orienter Googlebot vers un cache d’environ 1 semaine et qui lui sera dédié :

Compatible varnish-3.0.3

 

 sub vcl_recv {
...
if (req.http.User-Agent  ~ "(?i)googlebot" || req.http.User-Agent  ~ "(?i)msnbot" || req.http.User-Agent  ~ "(?i)slurp"  ) {
  return(lookup);
}
...
 }


sub vcl_hash {
if (req.http.User-Agent  ~ "(?i)googlebot" || req.http.User-Agent  ~ "(?i)msnbot" || req.http.User-Agent  ~ "(?i)slurp"  ) {
   hash_data("bot");
}
return (hash);
}


sub vcl_fetch {
...
if (req.http.User-Agent  ~ "(?i)googlebot" || req.http.User-Agent  ~ "(?i)msnbot" || req.http.User-Agent  ~ "(?i)slurp"  ) {
# ici, je choisis de mettre un gros cache pour les pages dont l'url commence par /2011 ou /2010 ...
      if (req.request == "GET" && req.url ~ "^/(2011|2010|2009|2008)") {
unset beresp.http.expires;
unset beresp.http.ETag;
set beresp.ttl = 600000 s;
return (deliver);
}
}
...
}

Le principe de ce code consiste à créer une clé de cache spécifique selon le navigateur.

L’inconvénient de cette solution : quand une page est mise en cache par la visite d’un internaute, elle n’alimente pas le cache dédié aux crawlers. C’est pour cela que je vous conseille de précharger le cache à l’aide d’un script dédié que je détaillerai dans un autre article.