Nginx propose des fonctionnalités de cache avancé pour des performances maximales.
Mais l’un des effets secondaires de la mise en cache de contenu est que les mises à jour de contenu sur le serveur d’origine ne se propagent pas nécessairement immédiatement au cache, ce qui signifie que les clients pourraient continuer à être servi l’ancien contenu pendant une période de temps.
Si une opération de mise à jour modifie un certain nombre de ressources en même temps), il est possible qu’un client soit servi un mélange de ressources périmées et actuelles, ce qui conduit à une présentation incohérente.
Nginx offre plusieurs façons de purger le cache.
Dans ce tutoriel, je vous explique comment vider le cache Nginx.
Comment vider le cache Nginx en totalité
Pour la configurer la mise en cache de Nginx, suivez ce guide :
Le chemin du cache se trouve dans la directive fastcgi_cache_path ou proxy_cache_path.
Il suffit d’utiliser la commande rm pour supprimer l’intégralité du cache nginx.
Par exemple :
rm -rf /var/cache/nginx/*
/etc/init.d/nginx reload
Relancez la configuration de nginx est nécessaire afin qu’il recréé les répertoires de cache.
Si vous ne le faites pas, le cache ne sera pas utilisé.
Comme le montre cette capture, le cache passe en MISS après avoir purgé le cache et le reste tant qu’on ne relance pas nginx.
Comment vider le cache Nginx d’une page WEB spécifique
Par la méthode Bypass
La directive proxy_cache_bypass ou fastcgi_cache_bypass est utilisée pour invalider le cache en demandant à Nginx de transmettre la demande au serveur backend et de rafraîchir la ressource mise en cache lors de la récupération à partir du serveur backend.
Ainsi, nous ne supprimons aucun élément mis en cache dans le cache, mais nous le rafraîchissons.
Voici un exemple d’utilisation avec une invalidation lorsque l’on interroge le serveur nginx depuis localhost.
Vous pouvez modifier le if pour ajouter un proxy ou un header spécifique.
if ($remote_addr ~ "^(127.0.0.1)$") {
set $bypass $http_cache_purge;
}
Ensuite on met à jour le cache comme ceci :
fastcgi_cache_bypass $bypass;
Ce qui nous donne :
server {
[...]
set $bypass 0;
if ($remote_addr ~ "^(127.0.0.1)$") {
set $bypass $http_cache_purge;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_cache php;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 302 30d;
fastcgi_cache_valid 301 5d;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 2;
fastcgi_cache_bypass $bypass;
add_header Cache $upstream_cache_status;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
On calcule le MD5 d’une page prise dans le cache Nginx à l’aide de CURL :
curl -s http://localhost/demo.php|md5sum
fe01ce2a7fbac8fafaed7c982a04e229 -
Puis on modifie le contenu de la page et Nginx continue de retourner le cache, ainsi, la modification n’est pas prise en compte.
curl -s http://localhost/demo.php|md5sum
fe01ce2a7fbac8fafaed7c982a04e229 -
On demande à mettre à jour le cache, qui est cette fois-ci est effective, le MD5 change.
curl -s -H 'Cache-Purge: true' http://localhost/demo.php|md5sum
107a170f84c3cd62af57a97c9bd0b531 -
Par la méthode proxy_cache_purge
La directive proxy_cache_purge ou fastcgi_cache_purge permet de supprimer l’entrée de cache avec une clé de cache correspondante. Le résultat d’un fonctionnement réussi est indiqué en renvoyant la réponse 204 (pas de contenu).
Tout d’abord, sur Debian et Ubuntu, il est nécessaire d’installer le paquet nginx-extras, sinon vous obtiendrez l’erreur suivante :
nginx: [emerg] unknown directive "proxy_cache_purge"
En effet, la directive proxy_cache_purge nécessite le module ngx_http_proxy_module.
proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;
map $request_method $purge_method {
PURGE 1;
default 0;
}
server {
[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_cache php;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_valid 200 302 30d;
fastcgi_cache_valid 301 5d;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 2;
fastcgi_cache_purge $purge_method;
add_header Cache $upstream_cache_status;
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
}
}
On voit bien que le purge du cache est pris en compte :
curl http://localhost/demo.php
demo
vim demo.php
curl http://localhost/demo.php
demo
curl -X PURGE "http://localhost/demo.php"
demo-111
Si la clé de cache d’une demande de purge se termine par un astérisque («*»), toutes les entrées de cache correspondant à la touche générique seront supprimées du cache. Cependant, ces entrées resteront sur le disque jusqu’à ce qu’elles soient supprimées pour inactivité ou traitées par le cache Purger, ou un client tente d’y accéder.
curl -X PURGE "http://localhost/demo.php"
Manuellement par la commande rm
Vous pouvez aussi supprimer le fichier cache d’une page WEB spécifique, mais pour cela, il faut bien comprendre le fonctionnement du cache NGINX.
Le nom de fichier dans un cache est le résultat de l’application de la fonction MD5 à la directive key de mise en cache. Par exemple, prenons cette directive de clé de cache :
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Ce qui nous donne une clé :
httpGETlocalhost/demo.php
Le nom du fichier dans le cache sera :
echo -n "httpGETlocalhost/demo.php"|md5sum
c9a68ec5651224435f3dc01d055550a0 -
En utilisant la commande find, on trouve bien notre fichier de cache pour la page demo.php :
find /var/cache/nginx -name "c9a68ec5651224435f3dc01d055550a0" -print
/var/cache/nginx/php/0/0a/c9a68ec5651224435f3dc01d055550a0
A partir de là, on peut vider le cache Nginx de la page suivante :
rm -f /var/cache/nginx/php/0/0a/c9a68ec5651224435f3dc01d055550a0
Script pour purger le cache Nginx
Enfin, on peut créer un script shell pour purger le cache d’une ressources :
CACHE_PATH=/var/cache/nginx
MD5=$(echo -n $1|md5sum|cut -d ' ' -f 1)
f1=$(printf $MD5 | tail -c 1)
f2=$(printf $MD5 | tail -c 3|head -c 2)
rm $CACHE_PATH/$f1/$f2/$MD5
Par exemple nommez le script vider-cache.sh puis appelez la ressource en argument :
./vider-cache.sh /masuperpage.php
avec Nginx helper pour WordPress
Nginx helper est une extension pour WordPress qui vous permet de vider le cache Nginx d’une page spécifique.
De plus lorsque vous modifiez un article, l’extension met à jour le cache automatiquement.
Cela est donc pratique pour livrer un contenu à jour.
Liens
- Nginx : un serveur WEB rapide
- Protéger Nginx des attaques DoS et bruteforce
- Optimiser Nginx pour améliorer la vitesse des sites WEB
- Optimiser le cache de Nginx et fastcgi
- Configurer le cache FastCGI de Nginx
- Nginx : implémenter la mise en cache du navigateur avec le Cache Control
- Comment vider le cache Nginx
- Nginx : configurer un MicroCaching pour améliorer les performances
- Installer/Configurer le module Google PageSpeed pour optimiser vos sites WEB
- Optimiser PHP-FPM
- Comment accélérer et optimiser WordPress
- Cloudflare : comment protéger Nginx et WordPress des attaques DoS, piratages et bruteforce
- Comment fonctionne un serveur WEB
L’article Comment vider le cache Nginx est apparu en premier sur malekal.com.
0 Commentaires