Archives pour l'étiquette téléstar.fr

Varnish : savoir ce qu’il met en cache

Pour savoir ce que varnish place dans en cache ?

Le plus simple est de lui demander de mettre l’information à disposition. L’ajout d’un entête http spécifique est la solution. Ainsi chaque appel http comportera l’information : en cache ou non ?

Cachable ?

Demandons à vanish de nous indiquer si l’objet peux être placé en cache pour ceci dans le block vcl_fetch de votre fichier de configuration varnish placé le code suivant. Attention,  prenez le temps de lire les commentaires du code pour comprendre ce qui possible de mettre en cache ou non.

# DEBUG NOTICE FOR VARNISHLOG
# Varnish determined the object was not cacheable
if (beresp.ttl <= 0s) {
set beresp.http.X-Cacheable = "NO:Not Cacheable";

# You don't wish to cache content for logged in users
} elsif (req.http.Cookie ~ "(UserID|_session)") {
set beresp.http.X-Cacheable = "NO:Got Session";
return(hit_for_pass);

# You are respecting the Cache-Control=private header from the backend
} elsif (beresp.http.Cache-Control ~ "private") {
set beresp.http.X-Cacheable = "NO:Cache-Control=private";
return(hit_for_pass);

# Varnish determined the object was cacheable
} else {
set beresp.http.X-Cacheable = "YES";
}
# END DEBUG NOTICE FOR VARNISHLOG

Cachable et dans le cache ?

Vanish indique maintenant si l’objet peux être placé dans son cache mais l’a t’il fait ? Ou du moins l’a t’il trouvé dans son cache sans à avoir à le demander au backend.  Pour le savoir plaçons le code suivant dans le bloc vcl_deliver.

 # Set Header for HIT or MISS
 if (obj.hits > 0) {
 set resp.http.X-Cache = "HIT";
 } else {
 set resp.http.X-Cache = "MISS";
 }

 

Consulter l’information

Un fois votre configuration activée un champ http  » X-Cacheable  » apparaîtra dans chaque header http de chaque échange pour indiquer si l’objet est potentiellement acceptable dans le cache. Et un autre champs « X-Cache » indique si il l’a trouvé dans son cache « HIT » ou si il à du le demander au serveur backend « MISS »

Avec curl c’est très simple à voir

# curl -I http://www.telestar.fr
HTTP/1.1 200 OK
Server: Apache
X-Powered-By: eZ Publish
Expires: Tue, 26 Aug 2014 09:54:02 GMT
Last-Modified: Tue, 26 Aug 2014 09:44:02 GMT
Cache-Control: public, max-age=600
Pragma:
Served-by: www.telestar.fr
Content-language: fr-FR
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
X-Cacheable: YES
X-Served-By: tls_web1
Date: Tue, 26 Aug 2014 09:53:01 GMT
X-Varnish: 1712524658 1712516447
Age: 535
Connection: keep-alive
X-UA-Device: pc
X-Cache: HIT
Via: tls-proxy2

la réponse est la X-Cacheable: YES   la page index de www.telestar.fr peux être mise en cache,  X-Cache: HIT d »ailleurs est elle en cache. Vous pouvez la retrouver avec curl , ou les outils de dev de chromium, ou encore firebug.

Avec la commande varnishtop vous pouvez suivre le ratio de page « cachable »

varnishtop -i TxHeader -I "^X-Cacheable:"
list length 2
15.00 TxHeader X-Cacheable: YES
 5.00 TxHeader X-Cacheable: NO:Not Cacheable

ou effectivement mise en cache

varnishtop -i TxHeader -I "^X-Cache:"
list length 2
60.63 TxHeader X-Cache: HIT
 51.07 TxHeader X-Cache: MISS

Avec les « developer  tools » de Chromium c’est aussi très simple

Via les dev tools de Chrome inspecter les headers http
Via les dev tools de Chrome inspecter les headers http