Caching con NGINX
Come configurare il caching delle pagine per velocizzare il sito e ridurre il carico sul server.
Quando un sito riceve molto traffico, il server esaurisce rapidamente le risorse generando le pagine ripetutamente. Il caching di NGINX consente di servire risposte pre-generate dalla memoria o dal disco, riducendo drasticamente i tempi di risposta e alleggerendo il carico su PHP e sul database.
NGINX può mettere in cache:
- file statici (CSS, JS, immagini)
- pagine dinamiche (risposte PHP/CMS)
- pagine di errore (404, 502, ecc.)
Su VPS e server dedicati, hai il pieno controllo sulla configurazione di NGINX.
1. Configurare il cache proxy generale (proxy_cache)
Apri il file di configurazione principale /etc/nginx/nginx.conf e aggiungi quanto segue nel blocco http { ... }:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=static_cache:32m inactive=60m max_size=2g;
/var/cache/nginx— cartella di archiviazione della cache (creala con:sudo mkdir -p /var/cache/nginx)levels=1:2— struttura delle directory per ricerche più rapidekeys_zone=static_cache:32m— zona in memoria per chiavi e metadati (32 MB)inactive=60m— i file vengono rimossi se non vengono consultati per 60 minutimax_size=2g— dimensione massima della cache su disco
Crea la cartella e imposta i permessi:
sudo mkdir -p /var/cache/nginx
sudo chown www-data:www-data /var/cache/nginx
2. Caching semplice dell'intero sito (proxy_cache)
Modifica o crea la configurazione del tuo sito (ad es. /etc/nginx/sites-available/site.com).
Esempio: caching di tutto il traffico tramite proxy:
server {
listen 80;
server_name site.com www.site.com;
location / {
proxy_pass http://127.0.0.1:8080; # la tua porta PHP-FPM o backend
proxy_cache static_cache;
proxy_cache_valid 200 301 302 60m; # metti in cache le risposte riuscite per 60 minuti
proxy_cache_valid 404 1m; # metti in cache gli errori per 1 minuto
proxy_cache_methods GET HEAD; # metti in cache solo le richieste GET e HEAD
proxy_ignore_headers Cache-Control Expires Set-Cookie;
proxy_cache_bypass $http_cookie; # ignora la cache se sono presenti cookie
}
}
I nostri prodotti e servizi
3. Caching FastCGI (per le risposte PHP)
Per mettere in cache le pagine dinamiche (ad es. contenuti generati da un CMS), usa fastcgi_cache.
Aggiungi quanto segue nel blocco http { ... } di /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;
Crea la cartella:
sudo mkdir -p /var/cache/nginx-fcgi
sudo chown www-data:www-data /var/cache/nginx-fcgi
Nel blocco server principale (dove viene gestito PHP), aggiungi il caching nel blocco location PHP:
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # adatta al tuo 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; # metti in cache le risposte riuscite per 60 minuti
fastcgi_cache_valid 404 1m; # metti in cache gli errori per 1 minuto
fastcgi_cache_bypass $http_cookie; # ignora la cache se sono presenti cookie
fastcgi_no_cache $http_cookie; # non salvare in cache se sono presenti cookie
}
Note utili
- Non mettere in cache le pagine con autenticazione, area clienti, carrelli o aree di amministrazione — usa
fastcgi_cache_bypassefastcgi_no_cacheper questi URI. - Per i CMS dinamici (Bitrix, WordPress, ecc.), metti in cache solo le richieste GET senza cookie.
- Dopo ogni modifica, testa e ricarica NGINX:
sudo nginx -t # verifica la configurazione
sudo systemctl reload nginx
- Svuota la cache manualmente se necessario:
sudo rm -rf /var/cache/nginx/*
sudo rm -rf /var/cache/nginx-fcgi/*
Aiuto
Hai domande o ti serve una mano? Scrivici tramite il sistema di ticket — siamo sempre qui per aiutarti!