2

Varnish è un accelleratore di applicazioni Web anche conosciuto come caching HTTP reverse proxy. Semplificando molto è sufficiente installarlo a fronte di un comune server Apache/Nginx per ottenere un miglioramento delle prestazioni da 300 a 1000 volte. Sembra troppo bello per essere vero ma non si tratta di magia. Pensate semplicemente a quanto lavoro deve fare Apache per caricare ogni pagina tra l’esecuzione del codice Php e le query al db MySql. Varnish non fa altro che salvare in memoria la pagina alla prima richiesta e fornirla direttamente alla successiva. Il video che segue dovrebbe illuminarvi in proposito.

Vediamo innanzitutto come installare Varnish. Per farlo eseguiamo il comando:

$ sudo apt-get install varnish

Ora facciamo un backup del file delle porte di Apache:

$ sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.bak

E modifichiamo le prime due righe del file come segue:

$ sudo nano /etc/apache2/ports.conf
$ NameVirtualHost 127.0.0.1:80
Listen 127.0.0.1:80

Ora andiamo a configurare Varnish per ascoltare sulla porta 80 del nostro server. Per farlo modifichiamo il relativo file di configurazione:

$ sudo nano /etc/default/varnish
# Should we start varnishd at boot?  Set to "no" to disable.
START=yes

# My configuration
# Ricordate di commentare eventuali altre DAEMON_OPTS attive
# di sostituire server_ip con l'ip pubblico del vostro server
# di modificare 1G con la memoria effettiva da allocare alla cache (ex.256m)
# se avete abbastanza RAM potete modificare l'ultima riga come segue:
# -s malloc,256M"
DAEMON_OPTS="-a server_ip:80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s file,/var/lib/varnish/$INSTANCE/varnish_storage.bin,1G"

Ora modifichiamo il nostro default.vcl per lavorare in maniera appropriata con WordPress e PhpMyAdmin:

$ sudo nano /etc/varnish/default.vcl
backend default {
    .host = "127.0.0.1";
    .port = "80";
}

# Drop any cookies sent to WordPress.
sub vcl_recv {
        if (req.url ~ "^/phpmyadmin") {
                return (pass);
        }
        if (!(req.url ~ "wp-(login|admin)")) {
                unset req.http.cookie;
        }
        remove req.http.X-Forwarded-For;
        set req.http.X-Forwarded-For = client.ip;
}

# Drop any cookies WordPress tries to send back to the client.
sub vcl_fetch {
        if (req.url ~ "^/phpmyadmin") {
                return (hit_for_pass);
        }
        if (!(req.url ~ "wp-(login|admin)")) {
                unset beresp.http.set-cookie;
        }
}

Nel dettaglio queste linee di codice indicano a varnish di non considerare, al fine del caching, i cookie di WordPress a meno che non si tratti dell’area amministrativa, per maggiori informazioni in proposito cliccate qua.

Tutte le richieste ad Apache da ora in poi avverrano passando attraverso Varnish quindi nei log risulterebbe 127.0.0.1 come IP del client. Per evitare questo piccolo inconveniente è sufficiente aggiungere la seguente riga di codice al nostro file /etc/apache2/apache2.conf come segue:

$ sudo nano /etc/apache2/apache2.conf

Aggiungere:

# Imposta un formato di log alternativo per gli host serviti da Varnish
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" varnishcombined

Come ultimo passo dobbiamo modificare i nostri file virtualhost per lavorare con varnish. Se ad esempio abbiamo solo il virtualhost di default:

$ sudo nano /etc/apache2/sites-enabled/000-default

Modifichiamo la prima linea come segue:


e modifichiamo la linea ralativa a CustomLog come segue (chiaramente mantenete la path di default del log):

# Access Log
CustomLog /var/www/apache.access.log varnishcombined

Ora che abbiamo terminato la nostra configurazione possiamo riavviare entrambi i demoni con:

$ sudo service apache2 restart
$ sudo service varnish restart

Da subito dovreste verificare un notevole miglioramento nella velocità di caricamento delle pagine. Per verificare l’effettiva influenza di Varnish è sufficiente digitare in console:

$ varnishstat

Per ottenere le statistiche dettagliate sul funzionamento di Varnish. Nello specifico tenete d’occhio la voce: cache_hit che corrisponde al numero di volte in cui la pagina è stata servita da Varnish invece di essere rigenerata da Apache.

Ora dobbiamo tenere presente che Varnish mette in cache tutte le richieste al Web Server per cui eventuali modifiche alle pagine non corrispondono automaticamente ad una rigenerazione delle cache. Per chiedere a Varnish di richiedere la pagina ad Apache è sufficiente inviare una richiesta specifica come potete scoprire a questo indirizzo ma qualcuno ha pensato a rendere tutto più semplice creando un plugin per WordPress che elimina la cache delle pagine in caso di modifica e commenti. Potete trovare Varnish HTTP Purge a questo indirizzo.

  1. Ciao,

    ho sentito parlare di Varnish da poco ed ero molto interessato ad utilizzarlo sul mio sito, solo che non ho capito come faccio ad usare quelle stringhe che hai scritto sul mio sito.

    Questo perché ho un backend del mio dominio relativamente limitato e mi chiedevo come potessi attivare questa funzione che definisco magica anche se tu stesso hai detto che è semplicemente una funzione intelligente.

    Grazie mille!

    Andrea

    1. Buongiorno Andrea,

      Per poter installare Varnish devi aver accesso root al server su cui è ospitato il sito internet, inoltre è necessario conoscere almeno le basi di come funziona un sistema unix.
      Molto probabilmente (correggimi se sbaglio) il tuo sito internet è hostato su un hosting condiviso per cui non è possibile attuare questa strategia.
      Le tue alternative sono quelle di utilizzare un provider che fornisca Varnish preinstallato oppure configurare un tuo server privato. Posso consigliarti Digital Ocean in tal senso.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *