varnish-reverse-proxy il Web corre veloce

Con Varnish il Web corre veloce

Scopri come installare e configurare uno dei migliori sistemi della cache per veloccizzare il vostro sito internet

Varnish è reverse proxy per caching HTTP che funziona come livello trasparente tra il vostro server Web e i client. In parole povere, agisce salvando in cache i contenuti Web per poterli distribuire più velocemente senza che il client debba aspettare la risposta del server Web. Il sistema, quindi, non funziona da solo: si deve trovare davanti a un server correttamente configurato. Il suo vantaggio più significativo è che aumenta sensibilmente i tempi di risposta dei vostri siti. In questotutorial ne vedremo le funzionalità di base, ma sappiate che può fare molto di più. Anche se può funzionare con Nginx, in questo tutorial utilizzeremo il server Apache : impiegare Nginx al posto di Apache non è cosi complicato ammesso che sappiate come modificare la configurazione. Potete trovare molte altre informazioni su Varnish nel suo sito Web ufficiale https://varnish-cache.org/ (in inglese).

Potete vedere una parte del sito nello screenshot di questa pagina. Un avviso particolare: vi consigliamo vivamente di fare i vostri esperimenti con Varnish in un ambiente di test o in una macchina virtuale perché un processo non configurato correttamente può compromettere l’accesso al vostro sito da parte del resto del mondo.

varnish-reverse-proxy

Installare Varnish

Installarlo su una macchina Debian è semplicissimo,basta eseguire il comando da terminale:

Terminale
  • sudo apt-get update
  • sudo apt-get install varnish

potete vedere la versione di Varnish che state utilizzando con il comando:

Terminale
  • varnishd -V
per caching HTTP che funziona come livello trasparente tra il vostro server Web e i client. In parole povere, agisce salvando in cache i contenuti Web

varnishd (varnish-4.1.1 revision 66bb824)

Copyright (c) 2006 Verdens Gang AS

Copyright (c) 2006-2015 Varnish Software AS

La sua installazione include diversi file eseguibili:

varnishadm, varnishhist, varnishncsa, varnishtest, varnishd, varnishlog, varnishstat e varnishtop.

La directory principale di configurazione è /etc/varnish ma ci sono anche alcuni file collegati a questo tool all’interno di /etc/default:

ls -l /etc/default/varnish*

I file di configurazione più importanti sono due,

/etc/varnish/default.v/

/etc/default/varnish:

qui trovate le definizioni dei parametri principali di varnish.

Il parametro più ricco quando s’imposta un processo Varnish è la dimensione della cache, perché ha un forte impatto sulle performance. In questo tutorial manterremo la dimensione per la cache.

Configurazione di base

potete avviare Varnish in questo modo:

Terminale
  1. service varnish start
  2. service varnishlog start
  3. service varnishncsa start

In modo molto simile potete fermare i servizi,cosi:

Terminale
  1. service varnish stop
  2. service varnishlog stop
  3. service varnishncsa stop

Quindi, se eseguite ps ax | varnish dopo aver avviato il proxy, vedrete almeno tre distinti processi in esecuzione: varnish che si occupa di tutte le funzionalità di varnish; il servizio varnishlog che si occupa di salvare tutti i log di varnish ma nel formato NCSA Common Log. Potete vedere come viene eseguito il servizio di varnish (varnishd) con facilità:

Terminale
  • ps ax | grep varnishd | head -l
  • 4661? Ss 0:00 /usr/sbin/varnishd -j

unix,user=vcache -F -a :6081 -T localhost:6082 -f /etc/varnish/defaul.vcl -S /etc/varnish/secret -s malloc,256m

Quindi, questa istanza di Varnish utilizza la porta 6081 (-a :6081), che solitamente viene utilizzata a scopo di test. Per prendere il controllo in modo trasparente del traffico Web del nostro sito, però, Varnish dovrebbe mettersi in ascolto sulla porta TCP utilizzata normalmente dal server Web e il server Web, a sua volta, dovrebbe passare su un altra porta disponibile.

In altre parole, Varnish sarà il processo che si occuperà per primo di gestire tutte le richieste HTTP.

Per questo, è giunto il momento di cambiare la configurazione attuale del nostro server Linux e far si che Varnish si metta in ascolto sulla porta 80 e il server Web Apache passi sulla porta TCP 8000, che ho scelto perché è facile da ricordare.

Su un sistema Debian GNU/Linux, per prima cosa dovrete apportare delle modifiche a due file di configurazione di Varnish, come potete vedere dall’output dell’uility diff qui di seguito:

cd /etc/default/

diff varnish varnish.orig

47c47

<<DAMEON_OPTS=”-a 80 /

>DAMEON_OPTS=”-a 6081 /

cd /etc/varnish/

diff default.vcl default.vcl.orig

18c18

< .port=”8000”

< .port=”8080”7

La prima modifica indica a Varnish di utilizzare la porta 80 mentre la seconda gli dice che il suo client, nel nostro caso Apache, lavora sulla porta TCP 8000. Inoltre, dovremo dire a tutti i siti virtuali di Apache che sono in ascolto sulla porta 80 di passare sulla porta 8000 da adesso in poi. Per fare questo dobbiamo modificare il Valore del parametro Listen nel nostro file /etc/apache2/ports.conf. Se avete atri host virtuali di Apache che non usano la porta TCP 80, non dovete modificare la loro configurazione. Per concludere dobbiamo effetuare le seguenti azioni:

Terminale
  1. cp /lib/systemd/system/varnish.service/etc/systemd/system
  2. vi /etc/systemd/system/varnish.service
  3. diff /lib/systemd/sustem/varnish/service /etc/systemd/system/varnish.service
  4. 9c9
  5. <ExecStart=usr/sbin/varnishd -j unix,user=vcache -F -a:80 -T localhost:6082 -f /etc/varnish/defautl.vcl -S /etc/varnish/secret -s malloc,256m
  6. systemctl dameon-reload
  7. systemctl restart apache2.service
  8. systemctl rrstart varnish.service

Gli ultimi due comandi servono a riavviare i due servizi.

Dobbiamo riavviare prima Apache affinché liberi la porta TCP 80 e poi Varnish, in modo che possa prendere il suo osto. Quindi, la prossima domanda è abbastanza semplice: potete provare ad accedere ad uno dei siti gestiti da Apache e vedere se funziona! Inoltre, potete controllare i file di log di Varnsh, un ìa delle sue varie uitlity oppure l’output del seguente comando:

Terminale
  • ps ax | grep varnishd |grep -v grep | tail -l

6068? Sl 0:00 /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

Se il valore del parametro-a è :80, allora Varnish è configurato corretamente. Tenete a mente che dargli molto spazio su disco RAM potrebbe non portare ai miglioramenti prestazionali che si potrebbe pensare perché causerebbe un rallentamento della velocità di ricerca all’interno della cache.

A seconda dei vostri dati, 4 GB di spazio su disco possono essere un buon punto d’inizio. Trovare la dimensione ottimale per la cache è un arte che richiede un monitoraggio costante delle performance del reverse proxy con l’aiuto di toll come varnishstat e varnishtop. Infine, dovreste tenere a mente che l’intero processo è trasparente ai clienti Web, il che è di fondamentale importanza. È buona norma inoltre mantenere una copia di backup di tutti i file di configurazione che avete modificato perché qualcosa potrebbe andare storto. In questo tutorial i file originali sono stati montati aggiungendo l’estensione .orig.

I log di Varnish

Nei sistemi Debian, potete trovare il file di Varnish nella cartella /var/log/varnish/. Al suo interno ci sono due file, uno chiamamto varnish.log e l’altro chiamato varnishncsa.log.

Il primo conserva i dati log di Varnish in un foramto definito dallo stesso server proxy, che è più legibile Ma occupa più spazio sullo schermo, mentre il secondo utilizza lo stesso formato di log usato dai file Apache.L’immagine nella pagina precedente mostra un esempio di dati contenuti nei due file, cosi potete farvi un idea di come funzionano.

L’utility Varnishlog permette d’interpretare il contenuto dei file.

È importante sapere che Apache continua a mantenere i suoi file di log dove erano prima, quindi non perdete alcun dato.

L’utility Varnishncsa mostra i dati che vengono scritti nel file Varnishncsa.log mentre Varnishtest permette di testare la cache del proxy. Potete trovare maggiori informazioni su entrambi i tool nella loro pagina man. Nell ‘iimagine qui a sinistra possiamo vedere la man page di Varnishtop, che funziona come l’utility da riga di comando top ma per i file log di Varnish. Comunque, l’immagine qui sopra è più interessante perché mostra Varnishtop in azione. Il tool Varnishadm permette di controllare un istanza attiva di Varnish, mentre Varnishhist mostra un istogramma delle richieste Varnish, che può rivelarsi molto utile per monitorare la performance di Varnish.

Come abbiamo visto, questo reserve proxy offre molte utility che ci permettono di controllare le operazioni che esegue e le performance. In questa sezione parleremo di Varnishstat che mostra statistiche relative i processi attivi di Varnish utilizzando diverse metriche. Questo tool può convertire il proprio output in XML utilizzando lo switch -x e in formato JSON utilizzando lo switch -j – potete vedere il formato di entrabe nell’immagine qui sotto.

Dei dati strutturati in questo modo non sono molto comodi se si sta verificando l’andamento in tempo reale in un database e d’interrogarlo in un secondo momento. Potete ottenere anche l’output in tempo reale sfruttando l’opzione -l.

Se non utilizzate nessuna di queste tre opzioni Varnishstat lavorerà in modo simile all’utility top e aggionerà il proprio output finché non lo terminate premendo Q.

Sicurezza e HTTP/2

HTTP/2 è l’ultima versione del protocollo HTTP e si concentra sulle performance. Le differenze chiave tra HTTP/2 e http/1.1 sono che include binari invece di testo per trasferire i Dati, la sicurezza utilizzando TLS, il mulitiplexing, che permette a HTTP/2 di utilizzare una singola connessione TCP per il parallelismo, la compressione degli header e il supporto per le risposte “push”. Nonostante le differrenze e i miglioramenti, molti dei quali rendono HHTP/2 signicativamente più veloce di HHTP/1.1, tutti i metodi HTTP, i codici di stato e la sematica rimangono invariati in HHTP/2. Potreste chiedervi come sia possibile fare il debug delle connessioni HTTP/2 se sono criptate. La soluzione sta nell’utilizzare il keylogging NSS insieme al plug-in Wireshark che è disponibile sia per chrome che per firefox.Potete trovare maggiori informazioni su HTTP/2 all’indirizzo: http://tools.ietf.org/html/rfc5246 (in inglese). TLS sta per transport layer security (sicurezza del livello di trasporto) e il suo scopo principale è quello di offrire sicurezza e privacy tra due applicazioni che comunicano.

Potete scoprire tutti i dettagli del protocollo TLS guardando il suo RCF all’indirizzo https://tools.ietf.org/html/rfc5246.

Perchè un programma come Varnish possa implementare la gestione della cache, abbiamo bisogno di due cose principali:

un modo per decidere se una risorsa può andare nella cache e un modo efficiente per accedere e mantenere la cache.

In altre parole, non ha molto senso salvare in cache una pagina dinamica che cambia ogni secondo cosi come ono ha senso avere in cache i dati che richiedono troppo tempo per essere trovati o troppo pesanti da mantenere.

Il futuro di Varnish

Anche se in questo è stata utilizzata la versione 4 di Varnish, esiste una versione 5 che offre alcune nuove funzionalità importanti. Quella pià rilevante e che attualmente è sperimentale è il supporto a HTTP/2, che permette di testare il traffico HTTP/2 e verificarne il funzionameto con Varnish. Comunque tenete presente che il supporto HTTP/2 per Varnish 5 di default non è attivo.

Un’altra caratteristica di questa nuova versione è che è passata da una pianificazine dei rilasci basata sulle funzionalità a una pianificazione periodica, questo significa che ci possiamo aspettare una nuova versione ogni sei mesi anche se questo attualmente sembra aver generato qualche problema. Varnish 5 supporta anche la terminazione TLS che permette di terminare una connessione TLS per voi e il protocollo PROXY. Se cercate maggior supporto su queste funzionalità potete dare un occhio a Hitch TLS (https://hitch-tls.org/).

Varnish 5 ha introdotto anche una cartella chiamata Shard, che si occupa del bilanciamento del carico e ha il supporto per la Negative Cache, che è una funzionalità piuttosto avanzata. Esistono diverse altre nuove capacità in Varnish 5 ma parlare di esse va oltre lo scopo di questo tutorial. Tenete presente che non dovete utilizzare ogni funzione, anche perché alcune di esse sono molto specializzate. L’idea generale è quella di utilizzare le cose di cui avete bisogno prima di implementare funzionalità più avanzate in questo potrete capire meglio come funziona il tutto.

Grazie! per l’utilizzo della Guida di Linuxiano.

Trovi questo tutorial utile? Condividi con i tuoi amici per tenerlo in vita.
Sii il primo a commentare, apprezzo i tuoi suggerimenti. Per ulteriori domande potete commentare qui sotto.