Purge de Cache FastCGI pour PHP-FPM
Mise en cache ultra-rapide pour WordPress avec invalidation de cache automatique et ciblée.
-
Pas de Proxy Nécessaire
Le cache FastCGI communique directement avec PHP-FPM—sans surcharge de proxy inverse
-
Réponse en Microsecondes
Pages mises en cache servies directement depuis la mémoire ou SSD par NGINX
-
Purge Sélective
Seules les pages modifiées sont purgées, le reste du cache reste actif
-
Sécurité Intégrée
Contourne le cache pour les utilisateurs connectés, les administrateurs et les paniers WooCommerce
Quand Utiliser FastCGI vs Proxy Cache
| Fonctionnalité | Cache FastCGI | Cache Proxy |
|---|---|---|
| Backend | PHP-FPM (direct) | Tout backend HTTP |
| Latence | Inférieure (pas de saut de proxy) | Légèrement plus élevée |
| Cas d'utilisation | WordPress, applications PHP | Node.js, Python, etc. |
| Complexité de configuration | Plus simple | Plus flexible |
Utilisez le cache FastCGI si vous exécutez WordPress ou PHP directement sur NGINX sans couche de proxy inverse.
Configuration Rapide
Étape 1 : Installer les Modules Requis
# Installer le dépôt GetPageSpeed
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
# Installer le module de purge de cache
dnf -y install nginx-module-cache-purge
Activez dans /etc/nginx/nginx.conf :
load_module modules/ngx_http_cache_purge_module.so;
Étape 2 : Configurer le Cache FastCGI
Ajoutez à votre bloc http dans /etc/nginx/nginx.conf :
# Définition de la zone de cache FastCGI
fastcgi_cache_path /var/cache/nginx/fastcgi
levels=1:2
keys_zone=WORDPRESS:100m
max_size=10g
inactive=60m
use_temp_path=off;
# Clé de cache (ce qui rend chaque page mise en cache unique)
fastcgi_cache_key "$scheme$request_method$host$request_uri";
Étape 3 : Configurer le Bloc Serveur
Créez ou mettez à jour votre bloc serveur WordPress :
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php;
# Paramètres de cache
set $skip_cache 0;
# Ne pas mettre en cache les requêtes POST
if ($request_method = POST) {
set $skip_cache 1;
}
# Ne pas mettre en cache les URL avec des chaînes de requête
if ($query_string != "") {
set $skip_cache 1;
}
# Ne pas mettre en cache l'administration WordPress, la connexion ou des chemins spécifiques
if ($request_uri ~* "/wp-admin/|/wp-login.php|/xmlrpc.php|/wp-cron.php") {
set $skip_cache 1;
}
# Ne pas mettre en cache pour les utilisateurs connectés ou les commentateurs récents
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_logged_in") {
set $skip_cache 1;
}
# Ne pas mettre en cache les pages WooCommerce
if ($request_uri ~* "/cart/|/checkout/|/my-account/") {
set $skip_cache 1;
}
if ($http_cookie ~* "woocommerce_cart_hash|woocommerce_items_in_cart") {
set $skip_cache 1;
}
# En-tête de statut de cache
add_header X-Cache-Status $upstream_cache_status;
# Activer la méthode PURGE
fastcgi_cache_purge PURGE from 127.0.0.1;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# Mise en cache FastCGI
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
# Important pour le contenu dynamique
fastcgi_cache_use_stale error timeout invalid_header http_500 http_503;
fastcgi_cache_lock on;
}
# Fichiers statiques - aucune configuration de cache nécessaire
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Créez le répertoire de cache et rechargez :
mkdir -p /var/cache/nginx/fastcgi
chown nginx:nginx /var/cache/nginx/fastcgi
nginx -t && systemctl reload nginx
Étape 4 : Installer le Plugin WordPress
- Allez dans Extensions → Ajouter
- Recherchez "Proxy Cache Purge"
- Installez et activez
wp plugin install varnish-http-purge --activate
Configurez le plugin :
- Allez dans Réglages → Proxy Cache Purge
- Définissez IP Personnalisée sur
127.0.0.1 - Enregistrez
Étape 5 : Configurer le Backend de Cache NGINX
À partir de Proxy Cache Purge 5.9.0, le plugin prend en charge nativement le format de purge par wildcard de NGINX. Configurez-le pour utiliser le backend NGINX :
- Allez dans Proxy Cache Purge → Paramètres
- Sous Backend de Cache, sélectionnez NGINX
- Cliquez sur Enregistrer les Paramètres
Ajoutez à votre wp-config.php :
define( 'VHP_PURGE_BACKEND', 'nginx' );
Héritage : Version du plugin < 5.9.0
Si vous utilisez Proxy Cache Purge version inférieure à 5.9.0, créez
wp-content/mu-plugins/nginx-cache-purge-fix.php :
<?php
/**
* Nom du Plugin : NGINX FastCGI Cache Purge Fix
* Description : Ajoute un wildcard pour purger toutes les variantes de cache
*/
add_filter("vhp_purgeme_path", function($purgeme, $schema, $host, $path, $pregex, $p) {
if (empty($pregex)) {
$purgeme .= "*";
}
return $purgeme;
}, 10, 6);
Test
# Première requête - devrait être MISS
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
# Deuxième requête - devrait être HIT
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: HIT
# Purger le cache
curl -sX PURGE 'http://127.0.0.1/*' -H 'Host: example.com'
# Vérifier la purge
curl -sI http://127.0.0.1/ -H 'Host: example.com' | grep X-Cache
# X-Cache-Status: MISS
Comment Ça Marche
flowchart LR
A["👤 Visiteur"] -->|"GET /post/"| B["NGINX"]
B -->|"Cache HIT"| C["⚡ Réponse Instantanée"]
B -->|"Cache MISS"| D["PHP-FPM"]
D --> E["WordPress"]
E --> D
D -->|"Stocker dans le cache"| B
B --> C
style A fill:#667eea
style B fill:#009639,color:#fff
style C fill:#48bb78,color:#fff
style D fill:#4a90d9,color:#fff
style E fill:#4a90d9,color:#fff
Comparaison de Performance
| Métrique | Pas de Cache | Cache FastCGI |
|---|---|---|
| Temps de Réponse | 200-500ms | 5-20ms |
| Requêtes/sec | 50-100 | 5,000+ |
| Utilisation CPU | Élevée | Minimale |
| Mémoire | Élevée (PHP) | Faible (NGINX) |
Impact dans le monde réel
Le cache FastCGI améliore généralement les temps de réponse de WordPress de 10 à 50 fois et peut gérer les pics de trafic sans problème.
Configuration Avancée
Cacher Différentes Durées par Type de Contenu
# Mettre en cache les pages pendant 60 minutes
fastcgi_cache_valid 200 60m;
# Mettre en cache les redirections pendant 10 minutes
fastcgi_cache_valid 301 302 10m;
# Ne pas mettre en cache les erreurs longtemps
fastcgi_cache_valid 404 1m;
fastcgi_cache_valid 500 502 503 504 0;
Servir du Contenu Obsolète Pendant les Erreurs
fastcgi_cache_use_stale error timeout invalid_header
updating http_500 http_502 http_503 http_504;
Verrou de Cache pour Prévenir les Stampedes
fastcgi_cache_lock on;
fastcgi_cache_lock_timeout 5s;
Lorsque plusieurs requêtes atteignent une page non mise en cache simultanément, seule une requête va à PHP-FPM. Les autres attendent que le cache se remplisse.
Dépannage
Pages non mises en cache
Vérifiez la variable $skip_cache. Problèmes courants :
- Chaînes de requête sur toutes les URL (certains plugins ajoutent
?ver=aux pages) - Cookies définis sur toutes les pages
- Vérifiez :
curl -sI votre-url | grep Set-Cookie
Pages connectées mises en cache
Vérifiez que la vérification des cookies inclut vos cookies d'authentification :
if ($http_cookie ~* "wordpress_logged_in") {
set $skip_cache 1;
}
Cache non purgé
- Vérifiez le paramètre du plugin : IP Personnalisée =
127.0.0.1 - Assurez-vous que le Backend de Cache est défini sur NGINX (ou que
VHP_PURGE_BACKENDest défini danswp-config.php) - Testez manuellement :
curl -X PURGE 'http://127.0.0.1/page/*'
Liens Connexes
-
Guide de Cache Proxy
Alternative pour les backends non-PHP
-
Module cache-purge
Référence complète des directives
-
Module PageSpeed
Couche d'optimisation supplémentaire