Sådan opsættes en varnish cache server – bytter
hjemmesider med høj trafik skal tjene det samme indhold flere gange til forskellige brugere. Afhængigt af din ansøgning kan det være rigtig dyrt (ressourcer taler) at behandle al applikationslogikken, hver gang en bruger anmoder om hjemmeside. Her er hvor server caching kommer, du kan bare en gemme midlertidig kopi af indholdet i hukommelsen og tjene dette indhold til alle brugere.
Varnish er fantastisk at cache indhold på serversiden. I det væsentlige skal du cache HTML-indhold, men du kan også cache filer: CSS, JS, billeder, dokumenter.
det lyder godt, men sandheden er som standard lak gør ingenting, eller i det mindste kan du spilde fordelene ved dette stykke program, og dokumentationen hjælper ikke, så jeg har skrevet denne artikel, så du kan få mest udbytte af lak. Jeg vil forklare, hvor og hvordan man konfigurerer, tester og implementerer en Varnish cache-server til din applikation.
til demonstrationsformål, lad os sige, at vi har 2 serverforekomster til vores app-og cache-servere med følgende lokale IP-adresser:
- App-Server: 192.168.1.2
- Cache-Server: 192.168.1.3
installer Varnish Cache Server
til dette artikels formål skal vi installere en Ubuntu server 16.04 med Varnish 4.0. For at installere lak skal du bare køre:
sudo apt install varnish
jeg vil installere Varnish 4.0, og fra nu af vil du være særlig opmærksom på 2 specifikke filer:/etc/default/varnish
og /etc/varnish/default.vcl
Backend configuration
den første ting du skal gøre er at konfigurere backend eller instruere lak, hvor internetapplikationen vil leve:
- hvad er værtsnavnet eller IP-adressen?
- hvad er havnen?
for at definere, at du skal gå og opdatere filen /etc/varnish/default.vcl
og finde det følgende afsnit, der vil blive konfigureret til vores eksempelformål som dette:
backend default { .host = "192.168.1.2"; .port = "8080"; .first_byte_timeout = 60s; .connect_timeout = 300s;}
det vil instruere lak til at lytte programmet kører på IP 192.168.1.2 og port 8080.
Konfigurer Lakdæmonen
det første du skal definere, hvor lak skal køre. Vi vil lade det køre på standardporten 6081. Det er meget almindeligt at køre denne dæmon på port 80 og 443 for SSL, men vi foretrækker at sætte NGINKS foran og lade den deltage i trafikken.
med hensyn til hukommelsen kører en lak tom installation med 256 MB hukommelse, det kan være nok til nogle applikationer, men for apps med høj trafik er det måske ikke nok, og mere, hvis du kun har reserveret en dedikeret server til cache.
du kan ændre det på:
/etc/default/varnish
Find følgende afsnit:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,256m"
for at opdatere mængden af RAM ændrer du den sidste linje, hvor den siger 256m og opdaterer for den krævede værdi, på min sag vil jeg dedikere 3 GB RAM til lak, så blokken vil se ud:
DAEMON_OPTS="-a :6081 \-T localhost:6082 \-f /etc/varnish/default.vcl \-S /etc/varnish/secret \-s malloc,3G"
Valider det kører med den rigtige konfiguration
Bekræft at det kører som forventet, kontroller processen ps aux | grep varnish
og du skal se noget som:
/usr/sbin/varnishd -j unix,user=vcache -F -a :6081 -T :6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,3G
Løs varnish startup daemon i nogle Ubuntu-installationer
vi har opdaget en fejl, hvor tjenesten ikke følger instruktionerne defineret i varnish-filen, og du skal muligvis redigere starttjenesten.
for at gøre det skal du åbne og redigere filen
/lib/systemd/system/varnish.service
og du vil se noget som dette:
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
for at få det til at fungere, skal du opdatere sektionen inde i linjen Eksekverstart og erstatte den til den ønskede konfiguration:
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
når du er færdig med det, skal du genindlæse servicedæmonen: systemctl daemon-reload
og genstart derefter lak.
Sådan konfigureres til at rense Cache
der er 2 måder at rydde Lakcachen på:
- genstart lak service.
- Send en anmodning om rensning til Varnish server.
genstart lak det handler bare om at genstarte tjenesten:
sudo service varnish restart
men hvad vi virkelig har brug for er at være i stand til at sende en RENSEANMODNING fra applikationsserveren. Det kan opnås ved at instruere serveren til at rense en bestemt sti eller dem alle. Ved at bruge CURL vil anmodningen se ud:
curl -X PURGE http://192.168.1.3:6181
som standard tillader lak ikke en RENSEANMODNING fra en ekstern server, så du skal tillade anmodninger fra applikationsserveren. For at gøre det skal du gå og redigere /etc/varnish/default.vcl
og finde udrensningsafsnittet, hvor du skal tilføje APPSERVERENS IP-adresse:
acl purge { "localhost"; "127.0.0.1"; "192.168.1.2"/24;}
sådan debug the PURGE
du bliver nødt til at validere, at alt fungerer korrekt. For at gøre det kan du bruge følgende kommando:
varnishlog -g request -q 'ReqMethod eq "PURGE"'
derefter kan du sende en RENSEANMODNING, og du skal se noget som dette for at bekræfte, at RENSEANMODNINGEN blev modtaget:
* << 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
en 200 OK-status betyder, at alt gik godt, og lak har ryddet cachen til den ønskede URL, og du skal have alt hvad du behøver for at starte caching af indhold på din server.
det næste trin, hvis du ikke har gjort, er at konfigurere reglerne for, hvilket indhold du vil cache, og hvilket ikke, men det er emne for et andet blogindlæg, og det afhænger meget af den anvendte applikationstype, ramme eller CMS.