Cache statique Nginx
Sur un VPS Linux HolyCloud servant des sites avec Nginx, optimiser le cache des fichiers statiques (CSS, JS, images, polices) réduit la charge CPU et améliore le temps de chargement. Ce guide combine en-têtes expires / Cache-Control et zone de cache proxy optionnelle.
Prérequis
- Nginx installé et site fonctionnel sur le VPS HolyCloud
- Accès sudo
- Domaine en HTTPS recommandé (Certbot)
Étape 1 : en-têtes de cache navigateur (assets versionnés)
Éditez le virtual host :
sudo nano /etc/nginx/sites-available/example.com
Bloc pour fichiers statiques courants :
location ~* \.(?:css|js|jpg|jpeg|gif|png|ico|svg|webp|woff2?|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
access_log off;
try_files $uri =404;
}
Pour des assets sans hash dans le nom (risque de cache obsolète), utilisez une durée plus courte :
expires 7d;
add_header Cache-Control "public";
Test et rechargement :
sudo nginx -t
sudo systemctl reload nginx
Vérifiez les en-têtes :
curl -I https://www.example.com/assets/style.css
Recherchez Cache-Control et Expires.
Étape 2 : gzip / gzip_static
Compression côté Nginx :
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml image/svg+xml;
Si vous pré-générez .gz à la build :
gzip_static on;
Étape 3 : zone de cache proxy (reverse proxy)
Utile si Nginx sur le VPS HolyCloud fait proxy vers une app (Node, PHP-FPM upstream HTTP, autre port).
Créez les répertoires :
sudo mkdir -p /var/cache/nginx/proxy
sudo chown www-data:www-data /var/cache/nginx/proxy
Dans /etc/nginx/nginx.conf, bloc http :
proxy_cache_path /var/cache/nginx/proxy
levels=1:2
keys_zone=STATIC:10m
max_size=500m
inactive=7d
use_temp_path=off;
Dans le server :
location /static/ {
proxy_pass http://127.0.0.1:3000;
proxy_cache STATIC;
proxy_cache_valid 200 7d;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
add_header X-Cache-Status $upstream_cache_status;
}
Étape 4 : open_file_cache (fichiers locaux)
Réduit les appels système pour sites à fort trafic sur le même VPS :
open_file_cache max=10000 inactive=30s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Placez ces directives dans le bloc http de nginx.conf.
Étape 5 : sécurité et HTML dynamique
Ne mettez pas de cache long sur le HTML/API :
location / {
add_header Cache-Control "no-store, no-cache, must-revalidate";
try_files $uri $uri/ /index.php?$query_string;
}
Avec PHP-FPM :
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
add_header Cache-Control "no-store";
}
Étape 6 : purge et monitoring
Taille du cache proxy :
sudo du -sh /var/cache/nginx/proxy
Purge manuelle :
sudo rm -rf /var/cache/nginx/proxy/*
sudo systemctl reload nginx
Logs avec statut cache :
sudo tail -f /var/log/nginx/access.log | grep -i cache
Sur un VPS HolyCloud à ressources limitées, limitez max_size (ex. 200–500 Mo) pour ne pas saturer le disque.
Vérification
sudo nginx -t
curl -I https://www.example.com/favicon.ico
curl -I https://www.example.com/static/app.js
Besoin d'aide HolyCloud
- Modifications sans effet : cache navigateur — testez en navigation privée ou videz le CDN si vous en utilisez un devant le VPS
X-Cache-Status: MISSpermanent : vérifiezproxy_cache_key, cookiesSet-Cookiequi désactivent le cache- Support HolyCloud : extrait
nginx -T, URL testée,df -h(espace cache disque)