Nginx : configurer le cache fastcgi avec WordPress

Dans ce tutoriel, je vais vous expliquer comment configurer le cache fastcgi avec WordPress afin de mettre cache les pages générées avec PHP afin d’augmenter la vitesse d’un site WordPress et réduire la charge serveur.

Avec l’activation du cache fastcgi, les pages générées en PHP seront mises en cache au niveau de Nginx, avec cette mise en cache, quand la page serait appelé et que celle-ci ce trouve en cache, elle serait directement servi sans génération de code PHP et donc de requêtes SQL.

Pour exploiter pleinement cette solution, il faut que le site soit principalement accessible en mode « invité » sans authentification.

C’est partie, voici les lignes de configuration a ajouté :

Dans la partie http{ ... } du fichier nginx.conf ou dans le fichier du virtuel host du site avec le bloc server { ... } ajouter les lignes suivantes qui vont permettre de déclarer le cache au niveau de Nginx.

# fastcgi cache
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wpcache:200m max_size=10g inactive=2h use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
  • fastcgi_cache_path : spécifie l’emplacement du cache et les paramètres du cache
  • keys_zone : L’attribut définit le nom cache et la taille de la zone mémoire partagée. 200 m suffisent pour contenir plus d’un million de clés.
  • max_size : taille max du cache sur le disque
  • inactive : durée de vie du cache en cas de non utilisation, ici 2 heures
  • fastcgi_cache_key : permet de générer l’identifiant (clé) du cache
  • fastcgi_ignore_header : permet de désactiver le cache en fonction de certaines entêtes HTTP.

Ce qui suit doit être ajouté dans la partie server { ... } du virtualhost.

On indiquer des exceptions quand le cache ne doit pas être utilisé :

set $skip_cache 0;

if ($request_method = POST) {
set $skip_cache 1;
}
if ($query_string != "") {
set $skip_cache 1;
}

if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|^/feed/*|/tag/.*/feed/*|index.php|/.*sitemap.*\.(xml|xsl)") {
set $skip_cache 1;
}

if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
set $skip_cache 1;
}

Dans la section qui traite l’exécution du code PHP ajouter les lignes suivantes :

location ~ \.php$ {
...
fastcgi_cache wpcache;
fastcgi_cache_valid 200 301 302 2h;
fastcgi_cache_use_stale error timeout updating invalid_header http_500 http_503;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-FastCGI-Cache $upstream_cache_status;
}
  • fastcgi_cache : active le cache et indiquer le nom du cache à utiliser
  • fastcgi_cache_valid : determine la durée du vie cache en fonction du code HTTP
  • fastcgi_cache_use_stale error : détermine les conditions quand Nginx doit diffuser du contenu obsolète.
  • fastcgi_cache_min_uses : détermine quand le cache doit être utilisé en fonction du nombre de requête.
  • fastcgi_cache_lock : comportement pour des requêtes simultanés.
  • fastcgi_cache_bypass : contournement du cache par la variable $skip_cache
  • fastcgi_no_cache : contournement du cache par la variable $skip_cache

Tester la configuration de Nginx :

sudo nginx -t

S’il n’y a pas d’erreur recharger la configuration :

sudo systemctl reload nginx

Pour tester le fonction du cache, aller sur le site WordPress en tant que visiteur non connecté et ouvrir les outils de développements du navigateur (F12).

Aller sur une page du site et regarder les entêtes de réponse.

Comment c’est le premier chargement de la page, le cache n’est pas disponible (MISS) en regardant l’entête X-Fastcgi-Cache.

Recharger la page :

Cette fois-ci, le cache a été utilisé et on peut le voir avec l’entête X-Fastcgi-Cache qui est à la valeur HIT.

Pour finir ce tutoriel, je vais vous expliquer comment purger le cache, depuis WordPress, il existe un plugin qui permet de gérer le cache Fastcgi de Nginx qui s’appel Nginx Helper, pour fonctionner il faut avoir le module libnginx-mod-http-cache-purge. Cette solution fonctionne sur une installation standard.

Si vous êtes en conteneur ou non, le plus simple pour purger le cache est de purger le dossier de cache et de recharger la configuration de Nginx :

rm -rf /etc/nginx/cache/
/etc/init.d/nginx reload

Vous savez maintenant comment mettre en place le place le cache Fastcgi sur Nginx pour WordPress.




Laisser un commentaire