Cache FastCGI Nginx
Le cache FastCGI de Nginx stocke les réponses PHP (HTML) sur disque ou en mémoire. Sur un VPS Performance HolyCloud, il réduit drastiquement les appels à PHP-FPM pour les pages publiques cacheables (accueil, articles, API GET idempotentes).
Prérequis
- Nginx + PHP-FPM opérationnels
- Compréhension des en-têtes
Cache-Controlet cookies de session - Espace disque pour la zone de cache (
/var/cache/nginx/fastcgi) - Site où le contenu dynamique utilisateur est séparé du contenu public
Zone de cache globale
Dans /etc/nginx/nginx.conf, bloc http :
fastcgi_cache_path /var/cache/nginx/fastcgi
levels=1:2
keys_zone=WORDPRESS:100m
inactive=60m
max_size=1g
use_temp_path=off;
Créez le répertoire :
sudo mkdir -p /var/cache/nginx/fastcgi
sudo chown www-data:www-data /var/cache/nginx/fastcgi
Configuration du vhost
server {
listen 443 ssl http2;
server_name exemple.tld;
root /var/www/exemple;
set $skip_cache 0;
# ne pas mettre en cache si session / admin
if ($request_method = POST) { set $skip_cache 1; }
if ($query_string != "") { set $skip_cache 1; }
if ($request_uri ~* "/wp-admin/|/wp-login.php|/panier|/checkout") { set $skip_cache 1; }
if ($http_cookie ~* "wordpress_logged_in|woocommerce_items_in_cart") { set $skip_cache 1; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
add_header X-FastCGI-Cache $upstream_cache_status;
}
}
Comprendre X-FastCGI-Cache
| -------- | ---------------- |
|---|---|
MISS |
Calcul PHP, puis stocké |
BYPASS |
Cache ignoré (règle $skip_cache) |
EXPIRED |
Entrée expirée, recalcul |
Test :
curl -sI https://exemple.tld/ | grep X-FastCGI-Cache
Deux requêtes consécutives : MISS puis HIT.
Micro-cache pour API
Pour une API publique en lecture :
fastcgi_cache_valid 200 10s;
add_header Cache-Control "public, max-age=10";
Réduisez inactive si les données changent souvent.
Purge manuelle
Nginx open source n'a pas de purge HTTP native sans module tiers. Purge fichier :
sudo find /var/cache/nginx/fastcgi -type f -delete
sudo nginx -s reload
Automatisez après déploiement CMS (hook CI).
Stale cache (option)
En cas de PHP indisponible, servir une version expirée :
fastcgi_cache_use_stale error timeout updating http_500 http_503;
fastcgi_cache_background_update on;
fastcgi_cache_lock on;
Utile pour résilience ; attention au contenu obsolète.
Vérification et monitoring
sudo nginx -t && sudo systemctl reload nginx
du -sh /var/cache/nginx/fastcgi
Logs :
sudo tail -f /var/log/nginx/access.log | grep -E 'HIT|MISS'
Pièges courants
- Panier WooCommerce : tout cookie panier doit bypasser le cache.
- HTTPS mixed : la clé inclut
$scheme— OK. - Commentaires modération : pages avec query
?replytocom=→ exclure. - RAM :
keys_zone=100m≈ 800k clés — adaptez au trafic.
Combinaison avec PHP OPcache
FastCGI cache ≠ OPcache : le premier évite d'exécuter PHP ; le second accélère l'exécution. Utilisez les deux.
Besoin d'aide ?
Support HolyCloud : envoyez nginx -T (sanitisé), en-têtes curl -I et description du CMS si le cache ne s'active pas (BYPASS permanent).