Hoe een Varnish cache server in te stellen-Swapps
Websites met veel verkeer moeten dezelfde inhoud meerdere malen aan verschillende gebruikers aanbieden. Afhankelijk van uw toepassing, het kan echt duur zijn (middelen praten) om alle logica van de toepassing te verwerken elke keer dat een gebruiker vraagt webpagina. Hier is waar server caching komt, kunt u gewoon een Opslaan tijdelijke kopie van de inhoud in het geheugen en deze inhoud aan alle gebruikers.
Varnish is geweldig om inhoud op de server te cachen. In wezen moet je HTML-inhoud cache, maar je kunt ook bestanden cache: CSS, JS, afbeeldingen, documenten.
het klinkt goed, maar de waarheid is dat Varnish standaard niets doet, of in ieder geval zou je de voordelen van dit stukje software kunnen verspillen, en de documentatie helpt niet, dus ik heb dit artikel geschreven, zodat je het meeste voordeel kunt halen uit Varnish. Ik ga uitleggen waar en hoe je een Varnish cache server moet configureren, testen en implementeren voor je toepassing.
voor demonstratiedoeleinden, laten we zeggen dat we 2 serverinstances hebben voor onze app-en cacheservers met de volgende lokale IP-adressen:
- App-Server: 192.168.1.2
- Cache-Server: 192.168.1.3
installeer Varnish Cache Server
voor dit doel van de artikelen, gaan we een Ubuntu server 16.04 met Varnish 4.0 installeren. Om Varnish te installeren, hoeft u alleen maar te draaien:
sudo apt install varnish
Ik zal Varnish 4.0 installeren, en vanaf nu zult u speciale aandacht besteden aan 2 specifieke bestanden:/etc/default/varnish
en /etc/varnish/default.vcl
Backend configuratie
het eerste wat u moet doen is de backend configureren of Varnish instrueren waar de webapplicatie zal wonen:
- Wat is de hostnaam of het IP-adres?
- Wat is de poort?
om te bepalen dat u het bestand /etc/varnish/default.vcl
moet bijwerken en de volgende sectie moet vinden, die zal worden geconfigureerd voor ons voorbeelddoel zoals dit:
backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}
het zal Varnish instrueren om de toepassing te luisteren die draait op IP 192.168.1.2 en poort 8080.
Configureer de Varnish-daemon
het eerste wat u nodig hebt om te definiëren waar Varnish zal draaien. We laten het draaien op de standaard poort 6081. Het is heel gebruikelijk om deze daemon te draaien op poort 80 en 443 voor SSL, maar we geven er de voorkeur aan om NGINX vooraan te zetten en het te laten staan om het verkeer bij te wonen.
met betrekking tot het geheugen, een Varnish blank installatie zal draaien met 256 MB geheugen, dat zou genoeg kunnen zijn voor sommige toepassingen, maar voor high traffic apps, is het misschien niet genoeg, en meer als u een dedicated server alleen voor cache hebt gereserveerd.
u kunt dit wijzigen op:
/etc/default/varnish
Zoek de volgende sectie:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"
om de hoeveelheid RAM bij te werken, verander je de laatste regel waar staat 256m en update voor de vereiste waarde, in mijn geval wil ik 3 GB RAM toewijzen aan Varnish, zodat het blok eruit zal zien als:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"
Valideer dat het draait met de juiste configuratie
bevestig dat het draait zoals verwacht, controleer het proces ps aux | grep varnish
en je zou iets als:
/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Fix Varnish startup daemon in sommige Ubuntu-installaties
hebben we een bug gedetecteerd waarbij de service de instructies die zijn gedefinieerd in het varnish-bestand niet volgt en u mogelijk de opstartservice moet bewerken.
om dat te doen open en bewerk het bestand
/lib/systemd/system/varnish.service
en u zult zoiets als dit zien:
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
om het te laten werken, moet u de sectie binnen de regel ExecStart bijwerken en vervangen voor de vereiste configuratie:
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
nadat je daarmee klaar bent, moet je de service daemon herladen: systemctl daemon-reload
en herstart Varnish.
hoe te configureren om Cache te wissen
er zijn 2 manieren om de cache te wissen:
- Herstart de Varnish-service.
- stuur een verzoek tot verwijdering naar de Varnish-server.
herstart Varnish het gaat erom de service opnieuw op te starten:
sudo service varnish restart
maar wat we echt nodig hebben is om een ZUIVERINGSVERZOEK te kunnen sturen van de applicatieserver. Het kan worden bereikt door de server te instrueren om een specifiek pad of alle van hen te zuiveren. Door Krul te gebruiken, zou het verzoek eruit zien als:
curl -X PURGE http://192.168.1.3:6181
standaard staat Varnish geen ZUIVERINGSVERZOEK van een externe server toe, dus moet u verzoeken van de toepassingsserver toestaan. Om dit te doen, ga en bewerk /etc/varnish/default.vcl
en zoek de sectie purge waar u het IP-adres van de app-server moet toevoegen:
acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}
het debuggen van de PURGE
u moet valideren dat alles correct werkt. Om dat te doen, kunt u het volgende commando gebruiken:
varnishlog -g request -q 'ReqMethod eq "PURGE"'
dan kunt u een ZUIVERINGSVERZOEK sturen en u zou zoiets als dit moeten zien om te bevestigen dat het ZUIVERINGSVERZOEK is ontvangen:
* << 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
een 200 OK-status betekent dat alles goed is gegaan en dat Varnish de cache voor de gevraagde URL heeft gewist, en dat je alles hebt wat je nodig hebt om inhoud op je server te cachen.
de volgende stap als u nog niet hebt gedaan, is het configureren van de regels van welke inhoud u wilt cachen en welke niet, maar dat is onderwerp voor een andere blogpost en het zal sterk afhangen van het type toepassing, framework of CMS gebruikt.