Retourner sur le site

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.

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).