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ù rapide
  • keys_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 minuti
  • max_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

Hosting WebServizi di hosting affidabili per siti web di qualsiasi dimensione.
Ordina
VPSInfrastruttura cloud flessibile con accesso root completo.
Ordina
Server DedicatiServer dedicati per le massime prestazioni.
Ordina

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_bypass e fastcgi_no_cache per 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!

Hai bisogno di aiuto?I nostri ingegneri ti aiuteranno gratuitamente con qualsiasi domanda in pochi minutiContattaci