Cache FastCGI Nginx Configurer le cache FastCGI de Nginx sur un VPS HolyCloud pour servir des pages PHP depuis la mémoire et réduire la charge PHP-FPM. ~11 min de lecture Intermédiaire #nginx #fastcgi #cache #php 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-Control et 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 | Valeur | Signification | |--------|----------------| | MISS | Calcul PHP, puis stocké | | HIT | Servi depuis le cache | | 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). Suite de la lecture Article précédent Analyser les I/O (iostat) Lire Article suivant Configurer le swap Lire