Cos’è Varnish Cache
Varnish Cache è un acceleratore HTTP progettato per migliorare drasticamente le performance dei siti web. Funziona come reverse proxy: si posiziona davanti al server web (Apache o Nginx) e memorizza le risposte in cache per servirle rapidamente senza dover generare ogni pagina da zero. Per WordPress, Varnish rappresenta una delle soluzioni di caching più efficaci, in grado di ridurre i tempi di caricamento da secondi a millisecondi e di gestire migliaia di richieste simultanee.
A differenza dei plugin di caching PHP-based (come WP Super Cache o W3 Total Cache), Varnish opera al livello del protocollo HTTP, molto prima che PHP venga eseguito. Questo significa che una richiesta per una pagina cacheata viene soddisfatta in poche decine di microsecondi, senza coinvolgere WordPress, il database o PHP.
Come Varnish accelera WordPress
Quando un visitatore richiede una pagina, Varnish controlla se ne ha una copia valida in cache. Se sì (cache HIT), restituisce immediatamente la risposta, senza contattare il server backend. Se no (cache MISS), inoltra la richiesta a WordPress, che genera la pagina dinamicamente. Varnish memorizza la risposta e la serve al visitatore. Le richieste successive per la stessa pagina ricevono una HIT, con tempi di caricamento trascurabili.
Il rapporto HIT/MISS è l’indicatore chiave delle performance. Un buon Varnish configurato per WordPress raggiunge un hit rate del 90-95% per i visitatori anonimi. Le pagine più richieste (homepage, articoli popolari, pagine statiche) sono quelle che beneficiano maggiormente.
Differenze con altri metodi di caching
La differenza fondamentale tra Varnish e i plugin di caching è il livello di operatività. I plugin PHP generano file HTML statici che il server web serve al posto delle pagine PHP dinamiche. Questo funziona, ma ha dei limiti: i file devono essere generati, memorizzati su disco e invalidati quando il contenuto cambia. Varnish gestisce tutto a livello di memoria RAM, con invalidazioni immediate e latenza quasi zero.
Varnish batte i plugin anche nella gestione del traffico: mentre un plugin di caching serve le pagine velocemente, Varnish può gestire decine di migliaia di connessioni simultanee grazie all’architettura event-driven. Inoltre, Varnish offre funzionalità di load balancing, health checking dei backend e caching intelligente basato sulle intestazioni HTTP.
Tuttavia, Varnish non è sempre necessario: per siti con traffico moderato (meno di 10.000 visitatori al giorno), un buon plugin di caching abbinato a un CDN come Cloudflare può essere sufficiente. Varnish diventa indispensabile quando il traffico cresce e i tempi di risposta devono rimanere bassi sotto carico.
Installazione su VPS
L’installazione di Varnish su un VPS Linux richiede alcuni passaggi. Su Ubuntu/Debian: sudo apt update && sudo apt install varnish -y. Su CentOS: sudo yum install epel-release && sudo yum install varnish -y. Dopo l’installazione, Varnish ascolta sulla porta 80 e inoltra le richieste al backend (Apache/Nginx) sulla porta 8080.
La configurazione del backend avviene nel file /etc/varnish/default.vcl. Ecco una configurazione base per WordPress:
vcl 4.0;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (req.url ~ "wp-admin|wp-login|xmlrpc.php") {
return (pass);
}
if (req.http.cookie) {
if (req.http.cookie ~ "wordpress_logged_in_" || req.http.cookie ~ "wp-postpass_") {
return (pass);
}
}
return (hash);
}
Questa configurazione base esclude dalla cache le pagine di amministrazione, il login e le pagine per utenti autenticati. Ogni altra richiesta viene considerata cacheable.
Purging rules per WordPress
La gestione dell’invalidazione della cache è cruciale per WordPress. Quando pubblichi un nuovo articolo o modifichi uno esistente, le pagine correlate (homepage, archivio, tag correlati) devono essere rimosse dalla cache per riflettere le modifiche. Plugin come Varnish HTTP Purge e WP-Varnish-Group-Purge si integrano con le hook di WordPress per inviare richieste PURGE a Varnish ogni volta che il contenuto cambia.
La configurazione di Varnish per accettare richieste PURGE richiede ACL (Access Control List) per limitare le richieste di invalidazione al solo server WordPress:
acl purgers {
"127.0.0.1";
"localhost";
}
sub vcl_recv {
if (req.method == "PURGE") {
if (!client.ip ~ purgers) {
return (synth(405, "Not allowed"));
}
return (purge);
}
}
Gestione dei cookie
I cookie sono il principale ostacolo al caching efficace di WordPress. I cookie di sessione WordPress (wordpress_logged_in, wordpress_sec, comment_author, wp-postpass) indicano che l’utente è autenticato o ha interagito con il sito. Varnish deve bypassare la cache per queste richieste. Per i visitatori anonimi, i cookie possono essere rimossi prima di verificare la cache:
sub vcl_recv {
if (req.http.cookie) {
unset req.http.cookie;
}
return (hash);
}
Questa tecnica elimina tutti i cookie per le richieste anonime, permettendo a Varnish di cacheare pagine che altrimenti sarebbero considerate uncacheable a causa di cookie di terze parti, tracking o plugin.
TTL e configurazione avanzata VCL
Il TTL (Time To Live) determina per quanto tempo una pagina rimane in cache. Per WordPress, un TTL di 120 secondi (2 minuti) è un buon compromesso: le pagine vengono rigenerate frequentemente, ma il carico sul server si riduce drasticamente. Per contenuti statici (CSS, JS, immagini) usa TTL molto più lunghi: 7-30 giorni.
Configurazione avanzata: gestione delle query string. WordPress usa parametri come ?p=123, ?page_id=45, ?s=search. Per default, ogni query string diversa crea una copia separata in cache, moltiplicando inutilmente lo spazio occupato. Puoi normalizzare le query string per evitare duplicazioni:
sub vcl_hash {
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
}
return (lookup);
}
Testare Varnish: verificare gli header
Dopo la configurazione, verifica che Varnish funzioni correttamente controllando gli header HTTP della risposta. Usa il comando curl -I https://tuosito.com nella shell o gli strumenti sviluppatore del browser (tab Network). Gli header da cercare sono:
X-Varnish: 32769 32768 (due numeri: ID richiesta e ID cache)
Via: 1.1 varnish-v4 (conferma che Varnish sta servendo)
X-Cache: HIT o X-Cache: MISS (se configurato nel VCL)
Age: 45 (secondi da quando la pagina è stata cacheata)
Un valore Age crescente conferma che la cache funziona. Se Via non compare, Varnish non sta intercettando le richieste: controlla le regole del firewall e la configurazione delle porte.
Hosting con Varnish integrato
Non tutti gli hosting supportano Varnish. I provider che lo includono di solito nei piani VPS e dedicati: Kinsta utilizza il proprio motore di caching basato su Nginx e Varnish, SiteGround offre SuperCacher basato su tecnologia simile, Pressidium ha Varnish preconfigurato su tutti i piani, WP Engine utilizza un sistema proprietario ispirato a Varnish. Anche RunCloud e ServerPilot permettono di attivare Varnish con un clic nei loro pannelli di gestione server.
Se il tuo hosting attuale non supporta Varnish, puoi comunque usare Cloudflare come proxy caching: non è Varnish ma offre benefici simili con una configurazione molto più semplice. Per chi ha un VPS, invece, Varnish è la scelta migliore per performance al top.
Conclusioni
Varnish Cache è una soluzione potente per velocizzare WordPress, capace di ridurre i tempi di caricamento dell’80-90% e di gestire picchi di traffico senza battere ciglio. La configurazione richiede competenze tecniche di base, ma i benefici in termini di performance e scalabilità sono enormi. Se gestisci un VPS e il tuo traffico cresce, Varnish è l’investimento giusto. Installa, configura e verifica gli header: il tuo sito volerà.
