Introduzione

Varnish Cache è un acceleratore web front-end che consente a siti Web dinamici di gestire un flusso di traffico elevato. Si tratta di un proxy HTTP con cache inversa che memorizza nella cache sia il contenuto statico che dinamico dal server, ciò aumenta considerevolmente la velocità di un sito web e migliora l'esperienza per l'utente.

Varnish Cache consente inoltre agli sviluppatori di configurare regole e impostare policy utilizzando il linguaggio di configurazione di Varnish, comunemente chiamato VCL. VCL è un programma che consente di dirigere Varnish su cosa dovrebbe fare con il traffico del sito. In questo modo è possibile controllare completamente ciò che si desidera memorizzare nella cache e in che modo.

Se il vostro intento è installare Varnish cache su di un server in remoto continuate a leggere, altrimenti se volete installare Varnish sul vostro computer locale saltate il primo paragrafo "Connessione al Server" e leggere il successivo.

Connessione al Server

Per accedere al server, è necessario conoscere l'indirizzo IP. Avrai anche bisogno della password per l'autenticazione.

Per connettersi al server come utente root digitare questo comando:
ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password dell'utente root.

Se non utilizzate l'utente root potete connettervi con un'altro nome utente utilizzando lo stesso comando, quindi modificare anche il primo parametro:
ssh [email protected]_DEL_SERVER

Successivamente vi verrà chiesto di inserire la password del vostro utente.

Siete ora connessi al vostro server, siete pronti per iniziare l'installazione di Varnish cache su Ubuntu 18.04 LTS.

Installare Varnish e Nginx

I pacchetti di Varnish e Nginx sono disponibili nel repository ufficiale di Ubuntu, è possibile quindi installarli semplicemente con il seguente comando:
sudo apt -y install varnish nginx

Per verificare lo stato dell'installazione dare il seguente comando:
ss -tlnf inet

Dovreste ricevere un messaggi di output simile al seguente:

State       Recv-Q       Send-Q              Local Address:Port             Peer Address:Port       
LISTEN      0            128                       0.0.0.0:80                    0.0.0.0:*          
LISTEN      0            128                 127.0.0.53%lo:53                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:22                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:6081                  0.0.0.0:*          
LISTEN      0            10                      127.0.0.1:6082                  0.0.0.0:* 
  • Nginx al momento utilizza la porta 80
  • Varnish utilizza entrambe le porte 6081 e 6082

Configurare Nginx

Nginx funzionerà come reverse proxy per Varnish, quindi è necessario riconfigurare la porta predefinita 80 su un'altra porta di ascolto, per esempio la 8080.

Apriamo il file di configurazione di default di Nginx:
sudo nano /etc/nginx/sites-available/default

Modificare le voci listen cambiando la porta da 80 a 8080, quindi:

...
server {
        listen 8080 default_server;
        listen [::]:8080 default_server;
...

Salvare e chiudere il file.

Verificare la corretta configurazione di Nginx:
nginx -t

Se l'output è positivo, riavviare Nginx, altrimenti rileggere i passaggi precedenti.
Riavviare Nginx:
sudo service nginx reload

Verificare la corretta configurazione delle porte:
ss -tlnf inet

Dovreste ricevere un messaggi di output simile al seguente:

State       Recv-Q       Send-Q              Local Address:Port             Peer Address:Port       
LISTEN      0            128                       0.0.0.0:8080                    0.0.0.0:*          
LISTEN      0            128                 127.0.0.53%lo:53                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:22                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:6081                  0.0.0.0:*          
LISTEN      0            10                      127.0.0.1:6082                  0.0.0.0:* 

Notare che adesso Nginx utilizza la porta 8080, non più la porta 80.

Configurare Varnish Cache Server

Bisogna adesso indirizzare il traffico di Nginx tramite il server di cache di Varnish, quindi aprire il file service di Varnish:
sudo nano /lib/systemd/system/varnish.service

Modificare la porta da 6081 a 80, quindi:

[Unit]
Description=Varnish HTTP accelerator
Documentation=https://www.varnish-cache.org/docs/4.1/ man:varnishd

[Service]
Type=simple
LimitNOFILE=131072
LimitMEMLOCK=82000
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/defaul$
ExecReload=/usr/share/varnish/varnishreload
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
PrivateDevices=true

[Install]
WantedBy=multi-user.target

Salvare e chiudere il file.

Successivamente, modificare le configurazioni di Varnish impostando la porta di Nginx 8080.
Aprire il seguente file:
sudo nano /etc/varnish/default.vcl

Se è stato installato Nginx sullo stesso server di Varnish non modificare nessuna riga, altrimenti inserire il proprio indirizzo IP e la porta, se è diversa:

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

Riavviare il servizio e il server di Varnish Cache:
sudo systemctl daemon-reload
sudo service varnish restart

Confermare la corretta configurazione delle porte:
ss -tlnf inet

Dovreste ricevere un output simile al seguente:

State       Recv-Q       Send-Q              Local Address:Port             Peer Address:Port       
LISTEN      0            128                       0.0.0.0:80                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:8080                  0.0.0.0:*          
LISTEN      0            128                 127.0.0.53%lo:53                    0.0.0.0:*          
LISTEN      0            128                       0.0.0.0:22                    0.0.0.0:*          
LISTEN      0            10                      127.0.0.1:6082                  0.0.0.0:*  

Le porte 80 e 8080 in uso da Varnish e Nginx.

Se si utilizza UFW firewall di Ubuntu, abilitare le porte necessarie, per maggiori informazioni leggere la seguente guida: Configurare UFW firewall su Ubuntu 18.04.

Testare Varnish Cache Server

È possibile testare facilmente il funzionamento del server Varnish utilizzando il comando curl.
Modificare il comando inserendo il proprio indirizzo IP o nome dominio
Da terminale dare il seguente comando:
curl -I IP_O_DOMINIO

Dovreste ricevere un output simile al seguente:

HTTP/1.1 200 OKServer: nginx/1.14.0 (Ubuntu)
Date: Fri, 12 Apr 2019 22:23:22 GMT
Content-Type: text/html
Last-Modified: Fri, 12 Apr 2019 21:42:58 GMT
ETag: W/"5cb10662-324"
Vary: Accept-Encoding
X-Varnish: 15
Age: 0
Via: 1.1 varnish (Varnish/5.2)
Accept-Ranges: bytes

Inoltre è possibile controllare alcune statistiche della cache di Varnish utilizzando il comando varnishstat:
sudo varnishstat

La configurazione e l'installazione di Varnish Cache Server con Nginx su Ubuntu 18.04 LTS è terminata.