Wat is Varnish Cache: installatie en basisconfiguratie van Varnish Cache Server
Varnish Cache is een reverse-proxycache die vóór de webserver HTTP-antwoorden in het geheugen bewaart en dezelfde verzoeken beantwoordt zonder de oorspronkelijke server te raadplegen. Toen we Varnish 6.6.2 op een AlmaLinux 9.8-server vóór WordPress zetten, werden pagina's door max-age=0 niet gecachet; we losten dat op door in VCL een bewaartijd in te stellen.
Welke verzoeken je cachet en hoe lang je ze bewaart, schrijf je in een VCL-bestand (Varnish Configuration Language).
1️⃣ Concept van Varnish Cache: reverse-proxycache
Varnish controleert bij elk verzoek eerst of er een opgeslagen antwoord is. Wordt het verzoek met een opgeslagen antwoord afgehandeld, dan is dat een cachetreffer (HIT); moet het antwoord van de oorspronkelijke server (backend) komen, dan is dat een cachemisser (MISS). Een antwoord dat bij een misser is opgehaald, wordt voor de bewaartijd opgeslagen en voor volgende verzoeken gebruikt.
Open-source Varnish ondersteunt geen TLS en kan HTTPS-verzoeken dus niet rechtstreeks ontvangen. Op poort 443 verwerkt Nginx of HAProxy de TLS en geeft daarna het verzoek door aan Varnish.
Het open-sourceproject Varnish Cache heet vanaf versie 9.0, uitgebracht in maart 2026, Vinyl Cache. De naam Varnish Cache wordt verder gebruikt door de versie die Varnish Software met extra TLS-functies verspreidt.
2️⃣ Varnish Cache Server installeren
Op AlmaLinux 9 installeer je het met het pakket varnish uit de standaardrepository (AppStream); dit pakket is Varnish 6.6.2, de versie van vóór de naamswijziging.
dnf -y install varnishControleer na de installatie de versie met [varnishd -V].
varnishd -Vvarnishd (varnish-6.6.2 revision 17c51b08e037fc8533fb3687a042a867235fc72f)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2020 Varnish SoftwarePakketten uit de RHEL-familie houden versie 6.6.2 aan, waarvan de ondersteuning door het project is gestopt, en leveren die alleen met extra beveiligingsfixes. Het pakket 6.6.2-7 uit juni 2025 bevat de fix voor een kwetsbaarheid voor HTTP request smuggling (CVE-2025-47905).
Bij de installatie worden ook [/etc/varnish/default.vcl] en [/usr/lib/systemd/system/varnish.service] aangemaakt.
grep ExecStart= /usr/lib/systemd/system/varnish.serviceExecStart=/usr/sbin/varnishd -a :6081 -f /etc/varnish/default.vcl -s malloc,256m[-a :6081] geeft de poort op die verzoeken ontvangt, en [-s malloc,256m] de 256MB geheugen die als cacheopslag dient.
3️⃣ Basisconfiguratie: backend en poort
In het standaard VCL-bestand [/etc/varnish/default.vcl] is poort 8080 van dezelfde server al vanaf het begin als backend ingesteld.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}Zet bij Apache de waarde van [Listen] in [httpd.conf] op 8080, zodat Apache de verzoeken ontvangt die Varnish doorgeeft.
# /etc/httpd/conf/httpd.conf
Listen 8080Bij sites met HTTPS laat je Varnish op poort 6081 staan en koppel je Nginx, dat de TLS verwerkt, zo dat het verzoeken aan Varnish doorgeeft.
Een opzet waarin Varnish verzoeken rechtstreeks op poort 80 ontvangt, past bij sites die alleen HTTP gebruiken. Maak dan zoals de installatiedocumentatie van Varnish Software beschrijft een kopie van het servicebestand en verander op de regel [ExecStart] 6081 in 80.
systemctl edit --full varnishDe kopie die je in de editor opslaat, wordt aangemaakt in [/etc/systemd/system/varnish.service], en de gewijzigde poort blijft behouden, ook als je het pakket bijwerkt.
systemctl enable --now varnishWelke opzet je ook kiest, sluit af met het commando enable en de optie now om automatisch starten bij het opstarten in te stellen en Varnish meteen te starten.
4️⃣ Werking controleren: X-Varnish- en Age-headers
Controleer na het starten van Varnish aan de antwoordheaders of WordPress-pagina's echt uit de cache komen. Het verzoek gaat zonder Nginx rechtstreeks naar poort 6081 van Varnish, dus het domein en of het HTTPS is geef je mee met de headers [Host] en [X-Forwarded-Proto].
curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1001
Age: 0
Via: 1.1 varnish (Varnish/6.6)[X-Varnish] is het nummer dat Varnish aan het verzoek geeft, en [Via: 1.1 varnish] laat zien dat het antwoord via Varnish is gegaan. [Age] is de tijd (in seconden) sinds het antwoord in de cache is opgeslagen.
Ook toen we hetzelfde verzoek 3 seconden later opnieuw stuurden, had [X-Varnish] één nummer en was [Age] 0, dus antwoordde weer de oorspronkelijke server. Een regel die de cacheplugin in [.htaccess] had gezet, voegt [max-age=0] toe aan HTML, waardoor de standaardconfiguratie van Varnish de bewaartijd op 0 seconden berekende.
Verzoeken met cookies gaan in de standaardconfiguratie ook niet via de cache. Dat geldt ook voor cookies van analysetools, dus alle verzoeken van bezoekers met zulke cookies gaan naar de oorspronkelijke server.
De VCL hieronder geeft login- en beheerverzoeken en verzoeken die geen GET of HEAD zijn door aan de oorspronkelijke server, en cachet de overige verzoeken nadat de cookies zijn verwijderd. Antwoorden met een bewaartijd van 0 seconden die geen cookies aanmaken, worden 10 minuten bewaard, en antwoorden die aangeven dat ze niet bewaard mogen worden, zoals [no-cache], worden niet bewaard.
vcl 4.1;
backend default {
.host = "127.0.0.1";
.port = "8080";
}
sub vcl_recv {
if (req.method != "GET" && req.method != "HEAD") {
return (pass);
}
if (req.url ~ "^/(wp-admin|wp-login\.php)" || req.http.Cookie ~ "wordpress_logged_in_|wp-postpass_|comment_author_") {
return (pass);
}
unset req.http.Cookie;
}
sub vcl_backend_response {
if (beresp.ttl <= 0s && !beresp.http.Set-Cookie) {
set beresp.ttl = 10m;
}
}Laad het VCL-bestand na een wijziging opnieuw met [systemctl reload varnish]. Hieronder staat het tweede van twee antwoorden toen we hetzelfde verzoek twee keer naar Varnish met deze VCL stuurden.
curl -sI -H "Host: example.com" -H "X-Forwarded-Proto: https" http://127.0.0.1:6081/ | grep -iE "^(HTTP|cache-control|x-varnish|age|via)"HTTP/1.1 200 OK
Cache-Control: max-age=0
X-Varnish: 1004 1002
Age: 3
Via: 1.1 varnish (Varnish/6.6)Het tweede verzoek, 3 seconden na het toepassen van de VCL verstuurd, had twee nummers in [X-Varnish] en [Age] was 3. Twee nummers betekenen dat de cache heeft geantwoord; het tweede nummer is dat van het verzoek dat de pagina van de oorspronkelijke server ophaalde en opsloeg.
Het verzoek met een logincookie kreeg één nummer en werd door de oorspronkelijke server beantwoord, terwijl het verzoek met alleen een cookie van de analysetool uit de cache werd beantwoord.
🔢 FAQ & aanbevolen content
ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.