Varnish

All webtrafikk på Samfundet går gjennom Varnish, en cachende reversproxy, før den treffer Apache. (SSL-trafikk går gjennom Hitch før den treffer Varnish, siden Varnish i seg selv ikke snakker SSL/TLS. Hitch er en SSL-terminator vedlikeholdt av Varnish-teamet.)

Det å ha Varnish foran i stedet for å la Apache snakke med brukere direkte er mer effektivt, av to årsaker:

I utgangspunktet står alle sider på Samfundet i «pass», slik at Varnish ikke prøver på noe caching overhodet. De store unntakene per september 2016 er uka.no og deler av samfundet.no (spesielt bilder). Imidlertid er det lett å sette opp caching om man plutselig får voldsom trafikk mot én side (f.eks. ved store billettslipp e.l.), siden alt allerede rutes gjennom Varnish. Husk å bruke reload og ikke restart om du endrer VCL; Varnish beholder ikke cachen sin på tvers av omstarter.

I utgangspunktet vil Varnish gjenbruke tilkoblinger til en backend (altså Apache), også på tvers av vhosts. Dette er et problem for oss siden vi bruker mpm-itk, hvor da Apache-barnet setter en uid på begynnelsen av tilkoblingen (og ikke får lov til å bytte tilbake). Derfor har vi noen små patcher i Varnish og vmod_gwist for å sikre at dette ikke skjer (det mest realistiske alternativet ville være å sette «Connection: close» på alle backend-requests, som er mulig men litt ineffektivt). Patchet versjon av vmod_gwist og patchen for varnish finner du i /home/cassarossa/itk/felles/git/libvmod-gwist/.

Sette opp ny vhost

  1. Lag vhosten i /etc/apache2/sites-available/foo.conf. Den skal være av typen <VirtualHost localhost:80>. Ikke sett opp noe om SSL, det tar Hitch seg av. Enable vhosten med «a2ensite foo». Reload Apache («systemctl reload apache2»).
  2. Om du vil ha HTTPS-redirect (mest sannsynlig vil du), legg til vhosten i den store if-en under «HTTPS redirect» i /etc/varnish/default.vcl. Reload Varnish («systemctl reload varnish»).
  3. Pek DNS-innslaget i /etc/bind/pz slik at det er CNAME til cirkus.samfundet.no. Inkrementer seriellen og reload bind («systemctl reload bind9»). Vent på propagering. Done!

Flyt av forespørsler

En forespørsel til cirkus begir seg ut på litt av en reise, se bildet under.

Intern flyt av IP-adresser

Det skal bittelitt triksing til for å bevare IP-adressen hele veien nedover stacken. Slik ser det ut:

Debugging

Verifisere varnish config

Hvis du har endret på default.vcl og vil passe på at syntaxen er riktig kan du kjøre:

theodorc@cirkus: sudo varnishd -C -f /etc/varnish/default.vcl 

Debugge en spesifikk side

Hvis du debugger Varnish for en spesifikk side er varnishlog din venn. F.eks jeg vil se alle cache MISS for hvorlengeerdettil.uka.no:

theodorc@cirkus: sudo varnishlog -q 'RespHeader:x-cache[1] eq MISS and ReqHeader:Host[1] eq hvorlengeerdettil.uka.no'

Du skjønner greia, det finnes mange gode ressurser der ute på hvordan vsl-query funker.

Lenker: Start, krisevarnish, letsencrypt, til nye itkere

Epost: itk@samfundet.no | Telefon: 992 15 925 | Sist endret: 2022-08-19 14:19 | Revisjon: 6 (historie, blame) | Totalt: 1886 kB | Rediger