Nel mondo dell’ottimizzazione delle prestazioni web, la velocità è importante. Gli utenti si aspettano che i siti web si carichino in un batter d’occhio e i motori di ricerca danno priorità ai siti a caricamento rapido. È qui che entra in gioco Varnish, un potente acceleratore HTTP progettato per aumentare drasticamente la velocità e la scalabilità dei siti web. Ma cos’è esattamente Varnish e come può aiutare a migliorare le prestazioni HTTP?
Varnish (noto anche come Varnish Cache) è un acceleratore di applicazioni web ad alte prestazioni, spesso definito come un server di caching reverse proxy. Si colloca tra gli utenti e il server web, memorizzando copie delle risposte HTTP (come pagine HTML, immagini o script) in modo che le richieste ripetute possano essere servite molto più velocemente.
A differenza dei server web tradizionali, come Apache o NGINX, Varnish è progettato specificamente per la memorizzazione nella cache e la distribuzione rapida dei contenuti. È comunemente utilizzato da siti web ad alto traffico, società di media e piattaforme di e-commerce che richiedono una distribuzione dei contenuti rapidissima.
Varnish funziona mettendo in cache le risposte HTTP in memoria. Quando un utente richiede una pagina:
Prima richiesta: Varnish inoltra la richiesta al server backend (ad esempio, Apache o NGINX).
Il backend genera la risposta e la invia a Varnish.
Varnish memorizza (cache) la risposta in memoria.
Varnish serve quindi la risposta all’utente.
Lerichieste successive per lo stesso contenuto vengono servite direttamente dalla cache, bypassando completamente il backend.
In questo modo si riduce il carico del server e si accelera notevolmente la distribuzione dei contenuti.
Tempi di caricamento migliorati: Varnish serve le pagine in cache in millisecondi, migliorando notevolmente la velocità di caricamento delle pagine.
Riduzione del carico del backend: gestendo gran parte del traffico dalla cache, Varnish libera i server web per gestire richieste più complesse e dinamiche.
Elevata scalabilità: Varnish è costruito per gestire migliaia di richieste al secondo, il che lo rende ideale per i siti web ad alto traffico.
Configurazione flessibile: Grazie al Varnish Configuration Language (VCL) integrato, è possibile regolare con precisione il modo in cui i contenuti vengono memorizzati nella cache, eliminati o consegnati.
Migliore esperienza utente: Carichi di pagina più veloci significano utenti più felici e tassi di rimbalzo più bassi.
Ecco un approccio semplificato per iniziare a usare Varnish:
Varnish può essere installato sulla maggior parte delle distribuzioni Linux tramite il gestore di pacchetti. Ad esempio:
È necessario puntare Varnish al proprio server backend e definire le regole di caching in un file VCL, solitamente situato in /etc/varnish/default.vcl.
Esempio di snippet:
Questo indica a Varnish di inoltrare le richieste al server web in esecuzione sulla porta 8080.
Per impostazione predefinita, Varnish ascolta sulla porta 6081, che è una porta non standard per il traffico HTTP. Per gli ambienti di produzione, è comune configurare Varnish in ascolto sulla porta 80, che è la porta HTTP standard, e regolare il server web (come Apache o Nginx) in modo che utilizzi una porta diversa, in genere 8080. In questo modo Varnish può gestire le richieste HTTP in entrata sulla porta 80, memorizzare nella cache il contenuto e inoltrare le richieste al server web sulla porta 8080.
Cambiare la porta di ascolto di Varnish
Aprite il file di configurazione di Varnish, solitamente presente in /etc/varnish/default.vcl
, e impostate la porta di ascolto su 80:
Configurare il server web (Apache/Nginx) sulla porta 8080
Se si utilizza Apache, è possibile modificare la direttiva Listen
in /etc/apache2/ports.conf
per metterlo in ascolto sulla porta 8080:
Per Nginx, modificare il blocco server
per metterlo in ascolto sulla porta 8080:
Riavviare Varnish e il server web
Dopo aver apportato queste modifiche, riavviate Varnish e il server web per applicare le nuove configurazioni:
Ora Varnish gestirà le richieste in arrivo sulla porta 80 e le inoltrerà al vostro server web sulla porta 8080, dove il contenuto sarà generato e servito.
Varnish consente di personalizzare il modo in cui i contenuti vengono memorizzati nella cache utilizzando il Varnish Configuration Language (VCL). VCL consente un controllo a grana fine sul comportamento della cache, tra cui l’esclusione di alcuni contenuti dalla cache, la gestione dei cookie e l’impostazione di regole di cancellazione.
È possibile escludere pagine o risorse specifiche dalla cache utilizzando condizioni nel file VCL. Ad esempio, si potrebbe voler evitare la memorizzazione nella cache di pagine dinamiche o di dati sensibili dell’utente, come i carrelli della spesa o i profili utente.
In questo esempio:
Le pagine con URL che contengono /cart
o /profilo utente
non saranno messe in cache e saranno passate direttamente al server di backend per la generazione dinamica.
È possibile memorizzare nella cache i contenuti in base a cookie specifici, il che è utile per personalizzare i contenuti. Per esempio, se si vuole mettere in cache il contenuto solo per gli utenti loggati con un cookie specifico, si può modificare la logica di cache in questo modo:
Questo esempio:
Verifica se la richiesta contiene un cookie session_id
. Se presente, Varnish metterà in cache il contenuto per gli utenti connessi e ignorerà la cache per quelli senza cookie.
Si può desiderare di eliminare contenuti specifici dalla cache dopo che sono diventati obsoleti (ad esempio, quando un articolo viene aggiornato). Questo può essere fatto utilizzando il comando purge
.
Questo esempio:
Purgare il contenuto in cache di qualsiasi articolo di notizie quando viene aggiornato, assicurando che gli utenti vedano sempre la versione più recente.
Per assicurarsi che Varnish funzioni in modo ottimale, è essenziale monitorare regolarmente le sue prestazioni e analizzare le percentuali di accesso alla cache. Varnish mette a disposizione diversi strumenti come varnishstat
, varnishlog
e Varnish Administration Console (VAC) per il monitoraggio delle prestazioni.
varnishlog fornisce le metriche chiave per analizzare le prestazioni di Varnish, come la velocità di risposta della cache, l’utilizzo della memoria e i tempi di risposta del backend. È possibile utilizzarlo per monitorare le prestazioni della configurazione della cache.
Questo comando mostra varie statistiche, tra cui:
cache_hit: Il numero di visite alla cache (richieste servite dalla cache).
cache_miss: Il numero di cache miss (richieste inoltrate al backend).
backend_conn: il numero di connessioni al server di backend.
È possibile utilizzare queste metriche per valutare l’efficacia della strategia di cache e modificarla se necessario per migliorare le prestazioni.
varnishlog fornisce registri dettagliati di ogni richiesta e della sua interazione con Varnish. Questo è utile per la risoluzione dei problemi e per capire perché certe richieste vengono servite dalla cache o inoltrate al backend.
Questo comando fornisce un log dettagliato che mostra:
Se le richieste sono state servite dalla cache o passate al backend.
I risultati ottenuti o mancati nella cache per risorse specifiche.
Eventi di cancellazione e altre interazioni con la cache.
La Varnish Administration Console (VAC) è un’interfaccia basata sul web che aiuta a gestire e monitorare l’istanza Varnish. VAC fornisce statistiche in tempo reale, dati di log e informazioni sulla cache in un’interfaccia grafica di facile utilizzo.
È possibile accedere a VAC collegandosi a http://your_server_ip:6082
(porta predefinita per VAC).
Utilizzate VAC per monitorare le prestazioni della cache, ottimizzare il codice VCL e perfezionare la strategia di caching in base alle metriche visualizzate.
Siti web multimediali: Distribuzione di risorse statiche come immagini o articoli di notizie ad alta velocità.
Piattaforme di e-commerce: Velocizzare gli elenchi dei prodotti o le pagine delle categorie.
Notizie e pubblicazioni: gestione dei picchi di traffico durante gli eventi di cronaca.
Accelerazione API: Caching degli endpoint API ad alta densità di lettura per ridurre il carico del backend.
Varnish è una soluzione potente per qualsiasi infrastruttura web che richieda prestazioni e scalabilità elevate. Scaricando le richieste HTTP ripetute dal backend e fornendo contenuti in cache alla velocità della luce, Varnish aiuta a migliorare la velocità delle pagine, a ridurre il carico del server e a migliorare l’esperienza dell’utente.
Se il vostro sito web gestisce una quantità significativa di traffico o semplicemente volete migliorare le prestazioni e l’affidabilità, l’integrazione di Varnish nel vostro stack è un passo avanti strategico.