Mise en cache NGINX

Comment configurer la mise en cache des pages pour accélérer votre site et réduire la charge serveur.

Lorsqu'un site reçoit un trafic important, le serveur épuise rapidement ses ressources à générer les pages à répétition. Le cache NGINX permet de servir des réponses pré-générées depuis la mémoire ou le disque, ce qui réduit considérablement les temps de réponse et décharge PHP ainsi que la base de données.

NGINX peut mettre en cache :

  • les fichiers statiques (CSS, JS, images)
  • les pages dynamiques (réponses PHP/CMS)
  • les pages d'erreur (404, 502, etc.)

Sur les VPS et les serveurs dédiés, vous avez un contrôle total sur la configuration NGINX.

1. Configurer le cache proxy général (proxy_cache)

Ouvrez le fichier de configuration principal /etc/nginx/nginx.conf et ajoutez ceci dans le bloc http { ... } :

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:32m inactive=60m max_size=2g;
  • /var/cache/nginx — dossier de stockage du cache (à créer : sudo mkdir -p /var/cache/nginx)
  • levels=1:2 — structure de répertoires pour des recherches plus rapides
  • keys_zone=static_cache:32m — zone en mémoire pour les clés et les métadonnées (32 Mo)
  • inactive=60m — les fichiers sont supprimés s'ils ne sont pas consultés pendant 60 minutes
  • max_size=2g — taille maximale du cache sur le disque

Créez le dossier et définissez les permissions :

sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx

2. Mise en cache simple de l'ensemble du site (proxy_cache)

Modifiez ou créez votre configuration de site (par ex. /etc/nginx/sites-available/site.com). Exemple : mise en cache de tout le trafic via un proxy :

server {
    listen 80;
    server_name site.com www.site.com;

    location / {
        proxy_pass http://127.0.0.1:8080;  # votre port PHP-FPM ou backend
        proxy_cache static_cache;
        proxy_cache_valid 200 301 302 60m;   # mise en cache des réponses réussies pendant 60 minutes
        proxy_cache_valid 404 1m;            # mise en cache des erreurs pendant 1 minute
        proxy_cache_methods GET HEAD;        # mise en cache des requêtes GET et HEAD uniquement
        proxy_ignore_headers Cache-Control Expires Set-Cookie;
        proxy_cache_bypass $http_cookie;     # contourner le cache si des cookies sont présents
    }
}

Nos produits et services

Hébergement webFonctionne sur des disques NVMe ultra-rapides. Convient aux sites de toute complexité.
Commande
VPSInfrastructure cloud flexible avec accès root complet.
Commande
Serveurs dédiésServeurs physiques pour une performance maximale.
Commande

3. Cache FastCGI (pour les réponses PHP)

Pour mettre en cache des pages dynamiques (par ex. le contenu généré par un CMS), utilisez fastcgi_cache.

Ajoutez ceci dans le bloc http { ... } de /etc/nginx/nginx.conf :

fastcgi_cache_path /var/cache/nginx-fcgi levels=1:2 keys_zone=fcgi_cache:100m inactive=60m max_size=5g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
fastcgi_cache_use_stale error timeout invalid_header http_500;

Créez le dossier :

sudo mkdir -p /var/cache/nginx-fcgi
sudo chown www-data:www-data /var/cache/nginx-fcgi

Dans le bloc serveur principal (là où PHP est géré), ajoutez le cache dans le bloc location PHP :

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;  # adaptez à votre socket PHP-FPM
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_cache fcgi_cache;
    fastcgi_cache_valid 200 301 302 60m;   # mise en cache des réponses réussies pendant 60 minutes
    fastcgi_cache_valid 404 1m;            # mise en cache des erreurs pendant 1 minute
    fastcgi_cache_bypass $http_cookie;     # contourner le cache si des cookies sont présents
    fastcgi_no_cache $http_cookie;         # ne pas stocker en cache si des cookies sont présents
}

Remarques utiles

  • Ne mettez pas en cache les pages avec authentification, espace client, paniers ou zones d'administration — utilisez fastcgi_cache_bypass et fastcgi_no_cache pour ces URI.
  • Pour les CMS dynamiques (Bitrix, WordPress, etc.), ne mettez en cache que les requêtes GET sans cookies.
  • Après toute modification, testez et rechargez NGINX :
sudo nginx -t          # vérifier la configuration
sudo systemctl reload nginx
  • Videz le cache manuellement si nécessaire :
sudo rm -rf /var/cache/nginx/*
sudo rm -rf /var/cache/nginx-fcgi/*

Aide

Une question ou besoin d'un coup de main ? Écrivez-nous via le système de tickets — nous sommes toujours là pour vous aider !

Besoin d’aide?Nos ingénieurs vous aideront gratuitement pour n’importe quelle question en quelques minutesNous contacter