L'utilisation d'un étage de cache web dans l'architecture d'une plate-forme d'hébergement est de plus en plus courante. Dans le cas de eZ Publish c'est même nécessaire si vous l'utilisé comme CMS générateur de site web [1].

Mais j'ai eu l'occasion de souligner l'intérêt d'un cache web à la lumière de mon actualité professionnel que cela soit quand Voici.fr dépasse les 650 K pages vue en 24h, quand Voici.fr et Gala.Fr ont survécu au pic d'audience du à la mort de Michael Jackson ou enfin quand l'optimisation d'un site eZ Publish 4 pour l'utilisation des caches web en prenant voici.fr en exemple.

Autorisé la purge dans squid.conf

Avant tout, il est nécessaire de modifier Squid via le fichier de configuration squid.conf afin d'autoriser la purge. Pour j'ai ajoutez les ligne suivantes dans ma configuration afin d'autorisé la purge depuis le squid et surtout depuis le réseau local afin que cela soit possible de toute les machines de l'architecture.

acl purge method PURGE
http_access allow PURGE localnet
http_access allow PURGE localhost

Purger squid avec cURL

Exemple pour purger une page du cache de trois serveurs SQUID avec cURL

~$ curl -I -X PURGE -H "Host: <HOST>" http://squid{1,2,3}/<URI>

Dans cet exemple nous allons supprimé la home page de http://www.femmeactuelle.fr/ (soit l'index) actuellement mise en cache sur nos trois serveurs reverse proxy squid :

~$ curl -I -X PURGE -H "Host: www.femmeactuelle.fr" http://squid{1,2,3}/
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:26 GMT
Content-Length: 0
 
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:26 GMT
Content-Length: 0
 
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:26 GMT
Content-Length: 0

Dans cet exemple nous avons voulu supprimer la page "cachée" de http://365.femmeactuelle.fr/ (soit l'index) Toutefois aucune page n'était présente dans le cache

~$ curl -I -X PURGE -H "Host: www2.femmeactuelle.fr" http://squid{1,2,3}/
HTTP/1.0 404 Not Found
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:45 GMT
Content-Length: 0
 
HTTP/1.0 404 Not Found
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:45 GMT
Content-Length: 0
 
HTTP/1.0 404 Not Found
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:35:45 GMT
Content-Length: 0

Purger squid avec squidclient

La même chose est possible avec squidclient

# squidclient -m PURGE -p 80 -h prpsquid1 http://www.femmeactuelle.fr/

L'utilisation de "{1,2,3}" n'est pas possible, il faut utiliser une boucle bash :

~$ for I in 1 2 3; do squidclient -m PURGE -p 80 -h squid$I http://www.femmeactuelle.fr/; done
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:56:11 GMT
Content-Length: 0
 
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:56:11 GMT
Content-Length: 0
 
HTTP/1.0 200 OK
Server: squid/2.6.STABLE5
Date: Fri, 30 Jan 2009 10:56:11 GMT
Content-Length: 0

Notes

[1] eZ n'est forcement utilisé comme générateur de site web. Il est avant tout un CMS; quelque soit la destination du contenu