Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Varnish Cache

Varnish Cache è uno strumento che permette di implementare un meccanismo di caching, frapponendosi tra i client ed il web server: ecco come configurarlo
Varnish Cache è uno strumento che permette di implementare un meccanismo di caching, frapponendosi tra i client ed il web server: ecco come configurarlo
Link copiato negli appunti

Come abbiamo già anticipato nella lezione precedente, il caching è uno dei passaggi fondamentali dell’ottimizzazione di un server. Ovunque ci sia una sorgente di dati cui fare accesso con frequenza, la presenza di un meccanismo di cache agisce memorizzando le informazioni su una memoria temporanea, e restituendole ai richiedenti quando possibile, in modo da ridurre gli accessi alla fonte primaria.

Un ruolo simile è vitale per le applicazioni web ad alto carico di lavoro, tanto che un meccanismo di caching è incorporato nei browser stessi.

In questa lezione vedremo come dotare il nostro server virtuale, basato su Aruba Cloud, di uno strumento che permette di abilitare un meccanismo di caching molto efficace. Varnish Cache è un prodotto molto conosciuto che svolge il ruolo di Reverse Proxy, ponendosi tra il server o il cluster di server e la rete Internet. Ha il compito di formare una barriera alle richieste provenienti dai client e, come effetto, produce un’accelerazione delle performance del sito web. Nella pratica, l’installazione di questo strumento farà sì che tutte le richieste in arrivo passeranno sempre prima da Varnish Cache, che deciderà se sarà necessario girare la richiesta al web server vero e proprio, o se evitare (fornendo una copia della risposta memorizzata in cache).

Nel seguito, faremo riferimento ad una configurazione LAMP del nostro server, di fatto ottimizzando l’esecuzione di un web server Apache. Come al solito, ci riferiremo ad Ubuntu 18.04.

Configurare Apache

Prima di procedere con l’installazione di Varnish Cache, abbiamo la necessità innanzitutto di modificare la porta di ascolto di Apache. Infatti, dovremo fare in modo che tutte le richieste destinate al web server, debbano in realtà arrivare prima a Varnish. Sarà quest’ultimo, se è il caso, ad inoltrarle ad Apache.

Supponendo di voler installare Varnish in modo che questo stia in ascolto sulla porta 80, modifichiamo la porta di ascolto di Apache agendo, con un editor di testo, sul file /etc/apache2/ports.conf. Qui, modifichiamo la riga relativa al comando Listen come segue:

Listen 8080

Configurazione di Varnish Cache

L’installazione di Varnish può essere effettuata mediante il comando seguente:

$ apt install varnish

Di default, questo servizio gira sulla porta 6081, pertanto dovremo modificare questa impostazione facendo sì che la porta di ascolto diventi la 80.

Nel file /etc/varnish/default.vcl, cercheremo la configurazione del backend (che, nel gergo di Varnish, corrisponde nel nostro caso al web server Apache) che ha come pre-impostazione una forma simile:

backend default {
    .host = "127.0.0.1";
    .port = "8080";
}

Nel nostro caso, questa configurazione è già quella opportuna: il nostro backend è infatti installato in locale (indirizzo IP 127.0.0.1), ed è in ascolto sulla porta 8080. Nel caso utilizzassimo configurazioni diverse, potrebbe essere necessario modificare opportunamente questi parametri.

Esistono poi due punti della configurazione relativi all’avvio di Varnish in cui dovremo solo modificare il numero di porta su cui questo sarà in esecuzione, ovvero 80 piuttosto che 6081.

Il primo punto si trova nel file /etc/default/varnish e corrisponderà, dopo la modifica, a:

DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"

Il secondo, collocato nel file /lib/systemd/system/varnish.service, dopo la modifica diventerà:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Riavviando il servizio avremo finalmente Varnish Cache in ascolto sulla 80 ed il suo backend, il web server Apache, sulla 8080:

$ systemctl daemon-reload
$ systemctl restart varnish

Osservando le porte in ascolto sul nostro server Aruba troviamo, tra le altre righe:

$ netstat –ltnp
 
Proto Recv-Q Send-Q Local Address    Foreign Address  State      PID/Program name
...
tcp        0      0 127.0.0.1:6082   0.0.0.0:*        LISTEN     20160/varnishd
tcp        0      0 0.0.0.0:80       0.0.0.0:*        LISTEN     20160/varnishd
tcp6       0      0 ::1:6082         :::*             LISTEN     20160/varnishd
tcp6       0      0 :::80            :::*             LISTEN     20160/varnishd
tcp6       0      0 :::8080          :::*             LISTEN     19814/apache2
...

Un output simile al precedente ci confermerà la bontà della nostra configurazione.

Verifica della configurazione

Per verificare la nostra installazione, possiamo innanzitutto aprire un browser e contattare l’indirizzo IP del nostro web server. Il fatto che Varnish Cache sia in ascolto sulla porta 80 risulterà del tutto trasparente dal nostro punto di vista, e riceveremo una risposta analoga a quella che avremmo ricevuto dal web server Apache.

Per avere una migliore contezza di ciò che avviene dietro le quinte, potremo osservare gli header HTTP della risposta. A tale scopo, potremmo utilizzare un tool dedicato al monitoraggio HTTP come Postman. Utilizzandolo per accedere all’URL del nostro web server, otterremo tra i vari header anche quelli mostrati in figura seguente:

Figura 1. Header della risposta, che mostra l’azione di Varnish Cache (click per ingrandire)Header della risposta, che mostra l’azione di Varnish Cache

Gli header precedenti dimostrano il corretto funzionamento di Varnish Cache.

Varnish Cache è anche dotato di un utile strumento, varnishncsa, che invocato da riga di comando permette di visualizzarne i log delle richieste HTTP ricevute:

$ varnishncsa
 
83.64.90.229 - - [15/May/2020:18:07:50 +0200] "GET http://80.211.140.227/ HTTP/1.1" 200 3138 "-" "PostmanRuntime/7.6.0"

Nel caso precedente, il nostro server ha indirizzo IP 80.211.140.227.

Potremmo proseguire con i nostri test effettuando altre prove ispirate dalla documentazione di Varnish.

Si consideri, tuttavia, che una delle prime operazioni da svolgere consiste nell’opportuna configurazione di un firewall - ad esempio, UFW - per evitare contatti al backend al di fuori di quello che Varnish Cache autorizza. Senza questo accorgimento, infatti, Apache rimarrebbe accessibile anche sulla porta 8080, bypassando totalmente l’azione del proxy.

Ti consigliamo anche