Comment invalider toute la cache de NGINX

Savez-vous comment invalider toute la cache de NGINX sans avoir à le redémarrer? Après trop longtemps, j'ai finalement réussi à trouver une façon qui me convenait! 🤗

2 minutes de lecture
Comment invalider toute la cache de NGINX
Photo de Elias Jara sur Pexels.

Mettre des données dans la cache de NGINX peut accélérer drastiquement les performances d'un site Web. Toutefois, il peut être nécessaire d'invalider cette cache afin de prendre en compte des modifications qui viennent d'être apportées. 🙈

NGINX fournit le module proxy_cache_purge, qui permet de faire facilement cela, mais celui-ci fait partie de sa souscription commerciale... Autrement dit, il est nécessaire de débourser un montant inconnu pour avoir cette fonctionnalité dans NGINX. Celle-ci ne fait pas partie du logiciel libre de droit. 😥

proxy_cache_path /data/nginx/cache keys_zone=cache_zone:10m;

map $request_method $purge_method {
    PURGE   1;
    default 0;
}

server {
    ...
    location / {
        proxy_pass http://backend;
        proxy_cache cache_zone;
        proxy_cache_key $uri;
        proxy_cache_purge $purge_method;
    }
}
Exemple de code utilisant la directive proxy_cache_purge.

Plusieurs forums et articles de blogues proposent des solutions qui ne conviennent pas nécessairement à tout le monde.

Une de ces façons de faire, probablement la plus connue, consiste tout simplement à effacer tous les fichiers présents dans le répertoire de cache avec la commande ci-dessous.

rm -rf /var/cache/nginx/*
Commande pour effacer tous les fichiers et dossiers de la cache de NGINX.

Malheureusement, après avoir exécuté cette commande, NGINX nécessiste d'être redémarré. Sans redémarrage, NGINX commence à fournir des pages blanches... 😫

Cette solution ne me convenait donc pas avec mon infrastructure actuelle sous Docker. Je souhaitais que la cache soit invalidée et rafraîchie facilement. Pendant de nombreuses années, j'ai donc contourné mon problème en ayant une durée de cache de seulement 30 minutes. Cela permettait que mes modifications soient visibles à mon audience dans ce délai maximal.

Toutefois, après avoir récemment effectué encore plus de recherches, j'ai finalement réussi à trouver LA solution qui me permettrait d'invalider toute la cache sans avoir à redémarrer mon service NGINX.

Il s'agit en fait d'une toute petite commande. La voici ci-dessous.

find /var/cache/nginx/ -type f -exec rm -f {} \;
Commande pour effacer tous les fichiers uniquement de la cache de NGINX.

La différence avec la première commande est subtile, mais elle semble avoir une grande importance pour NGINX : seuls les fichiers sont supprimés. Tous les répertoires sont conservés. L'arborescence est préservée et prête à recevoir le nouveau fichier de cache, lors de la prochaine visite sur le site Web.

Avec cette commande, il ne sera plus nécessaire de redémarrer NGINX. 😊

Restez branché, dans les prochaines semaines, je vous partagerai la suite de cet article afin que vous puissiez invalider uniquement la cache d'une seule page Web. 😉