Come impostare un server Varnish cache – Swapps
I siti Web con traffico elevato devono servire lo stesso contenuto più volte a utenti diversi. A seconda dell’applicazione, può essere molto costoso (risorse che parlano) elaborare tutta la logica dell’applicazione ogni volta che un utente richiede una pagina Web. Qui è dove viene il caching del server, si può solo una copia temporanea salvare il contenuto in memoria e servire questo contenuto a tutti gli utenti.
Varnish è ottimo per memorizzare i contenuti nella cache sul lato server. Essenzialmente dovresti memorizzare nella cache il contenuto HTML ma puoi anche memorizzare nella cache i file: CSS, JS, immagini, documenti.
Suona bene, ma la verità è che per impostazione predefinita Varnish non fa nulla, o almeno potresti sprecare i vantaggi di questo software, e la documentazione non aiuta, quindi ho scritto questo articolo, quindi puoi ottenere il massimo beneficio da Varnish. Spiegherò dove e come configurare, testare e distribuire un server di cache Varnish per la tua applicazione.
A scopo dimostrativo, supponiamo di avere 2 istanze server per i nostri server di app e cache con i seguenti indirizzi IP locali:
- Server app: 192.168.1.2
- Server cache: 192.168.1.3
Installare Varnish Cache Server
Per questo scopo articoli, ci accingiamo a installare un Ubuntu server 16.04 con Varnish 4.0. Per installare la Vernice, è necessario eseguire:
sudo apt install varnish
vorrei installare Vernice 4.0, e da ora in poi lei sarà prestando particolare attenzione ai 2 file specifici:/etc/default/varnish
e /etc/varnish/default.vcl
configurazione del Backend
La prima cosa che devi fare è configurare il backend o di istruire la Vernice in cui l’applicazione web sarà in diretta:
- Qual è il nome host o l’indirizzo IP?
- Qual è la porta?
Per definire che è necessario andare ad aggiornare il file /etc/varnish/default.vcl
e trovare la seguente sezione, che verrà configurata per il nostro scopo di esempio in questo modo:
backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}
Istruirà Varnish ad ascoltare l’applicazione in esecuzione su IP 192.168.1.2 e porta 8080.
Configura il demone Varnish
La prima cosa che devi definire dove verrà eseguito Varnish. Lo lasceremo in esecuzione sulla porta predefinita 6081. È molto comune eseguire questo demone sulle porte 80 e 443 per SSL, ma preferiamo mettere NGINX in primo piano e lasciarlo per assistere al traffico.
Per quanto riguarda la memoria, un’installazione vuota di Varnish verrà eseguita con 256 MB di memoria, che potrebbe essere sufficiente per alcune applicazioni, ma per le app ad alto traffico, potrebbe non essere sufficiente, e di più se si è riservato un server dedicato solo per la cache.
Puoi cambiarlo a:
/etc/default/varnish
Trova la seguente sezione:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"
aggiornare la quantità di RAM, è possibile modificare l’ultima riga in cui Si dice 256m e di aggiornamento per il valore richiesto, nel mio caso, voglio dedicare 3GB di RAM per la Vernice, in modo che il blocco sarà simile:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"
la Convalida È in esecuzione con la giusta configurazione
Confermare che È in esecuzione come previsto, controllare il processo ps aux | grep varnish
e si dovrebbe vedere qualcosa di simile:
/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Correggi il demone di avvio di Varnish in alcune installazioni di Ubuntu
Abbiamo rilevato un bug in cui il servizio non segue le istruzioni definite nel file di varnish e potrebbe essere necessario modificare il servizio di avvio.
Per farlo apri e modifica il file
/lib/systemd/system/varnish.service
e vedrai qualcosa del genere:
Description=Varnish HTTP acceleratorDocumentation=https://www.varnish-cache.org/docs/4.1/ man:varnishdType=simpleLimitNOFILE=131072LimitMEMLOCK=infinityExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256MExecReload=/usr/share/varnish/reload-vclProtectSystem=fullProtectHome=truePrivateTmp=truePrivateDevices=trueWantedBy=multi-user.target
Per farlo funzionare, sarà necessario aggiornare la sezione all’interno della riga ExecStart e sostituirla per la configurazione richiesta:
ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Dopo aver finito con quello, è necessario ricaricare il demone del servizio: systemctl daemon-reload
e quindi riavviare Varnish.
Come configurare l’ELIMINAZIONE della cache
Esistono 2 modi per cancellare la cache di Varnish:
- Riavviare il servizio vernice.
- Invia una richiesta di ELIMINAZIONE al server Varnish.
Riavvia Varnish Si tratta solo di riavviare il servizio:
sudo service varnish restart
Ma ciò di cui abbiamo veramente bisogno è essere in grado di inviare una richiesta di ELIMINAZIONE dal server delle applicazioni. Può essere ottenuto istruendo il server per eliminare un percorso specifico o tutti loro. Usando CURL, la richiesta sarebbe simile a:
curl -X PURGE http://192.168.1.3:6181
Per impostazione predefinita Varnish non consente una richiesta di ELIMINAZIONE da un server esterno, quindi è necessario consentire le richieste dal server delle applicazioni. Per fare ciò, vai e modifica /etc/varnish/default.vcl
e trova la sezione di spurgo in cui devi aggiungere l’indirizzo IP del server app:
acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}
Come eseguire il debug di PURGE
È necessario convalidare che tutto funzioni correttamente. Per farlo, puoi usare il seguente comando:
varnishlog -g request -q 'ReqMethod eq "PURGE"'
Quindi puoi inviare una richiesta di ELIMINAZIONE e dovresti vedere qualcosa di simile per confermare che la richiesta di ELIMINAZIONE è stata ricevuta:
* << Request >> 1179851- Begin req 1179850 rxreq- ReqStart 192.168.195.197 39700- ReqMethod PURGE- ReqURL /.*- ReqProtocol HTTP/1.1- ReqHeader Host: swapps.com- ReqHeader User-Agent: W3 Total Cache- ReqHeader Connection: close- ReqHeader X-Forwarded-For: 192.168.195.197- VCL_call RECV- Timestamp Process: 1531199642.768541 0.000094 0.000094- RespHeader Date: Tue, 10 Jul 2018 05:14:02 GMT- RespHeader Server: Varnish- RespHeader X-Varnish: 1179851- RespProtocol HTTP/1.1- RespStatus 200- RespReason OK- RespReason Purged- End
Uno stato OK di 200 significa che tutto è andato bene e Varnish ha cancellato la cache per l’URL richiesto e dovresti avere tutto il necessario per iniziare a memorizzare nella cache il contenuto sul tuo server.
Il prossimo passo se non lo hai fatto è configurare le regole di quale contenuto vuoi memorizzare nella cache e quali no, ma questo è l’argomento per un altro post del blog e dipenderà molto dal tipo di applicazione, framework o CMS utilizzato.