Hej där! Som en Varnish-leverantör har jag sett på egen hand hur inställning av HTTP-cachehuvuden i Varnish VCL kan vara en spelförändring för webbplatsens prestanda. I den här bloggen går jag igenom processen steg för steg.
Först och främst, låt oss förstå varför HTTP-cachehuvuden är så viktiga. När en användare besöker en webbplats begär webbläsaren resurser som HTML, CSS, JavaScript och bilder från servern. Utan korrekt cachelagring måste servern behandla dessa förfrågningar varje gång, vilket kan sakta ner webbplatsen, särskilt under perioder med hög trafik. HTTP-cachehuvuden talar om för webbläsaren och andra mellanliggande cachar (som Varnish) hur länge de kan lagra en viss resurs och återanvända den utan att behöva gå tillbaka till servern.


Grunderna i Varnish VCL
Varnish Configuration Language (VCL) används för att styra hur Varnish beter sig. Det är som en uppsättning regler som Varnish följer när han hanterar förfrågningar och svar. Det finns några viktiga subrutiner i VCL som vi kommer att fokusera på för att ställa in cachinghuvuden:vcl_recv,vcl_backend_response, ochvcl_deliver.
vcl_recv
Devcl_recvsubrutinen anropas när Varnish tar emot en begäran från en klient (vanligtvis en webbläsare). Det här är ett bra ställe att fatta beslut om huruvida en förfrågan ska cachelagras eller inte. Du kanske till exempel vill utesluta vissa typer av förfrågningar, som de för dynamiskt innehåll som ändras ofta.
sub vcl_recv { # Cachelagra inte POST-förfrågningar if (req.method == "POST") { return (pass); } # Du kan lägga till fler villkor här baserat på URL-mönster if (req.url ~ "^/admin/") { return (pass); } }
I den här koden säger vi åt Varnish att inte cache POST-förfrågningar eftersom de vanligtvis involverar formulärinlämningar och sannolikt är dynamiska. Vi utesluter även förfrågningar som börjar med/administration/eftersom de förmodligen är för ett administrativt område på webbplatsen som har dynamiskt innehåll.
vcl_backend_response
Devcl_backend_responsesubrutinen anropas när Varnish får ett svar från backend-servern. Det är här vi kan ställa in eller ändra cachningshuvudena.
sub vcl_backend_response { # Ställ in en standardcachetid för alla svar set beresp.ttl = 3600s; # Du kan ställa in olika cachetider baserat på innehållstyp if (beresp.http.Content - Typ ~ "^text/html") { set beresp.ttl = 1800s; } # Lägg till en anpassad cache - control header set beresp.http.Cache - Control = "public, max - age=3600"; }
Här ställer vi in en standardtid - till - live (TTL) på 3600 sekunder (1 timme) för alla svar. För HTML-innehåll minskar vi TTL till 1800 sekunder (30 minuter) eftersom HTML kan ändras oftare. Vi lägger också till enCache - Kontrollheader, som är en vanlig HTTP-header som talar om för webbläsaren och andra cachar hur resursen ska hanteras.
vcl_deliver
Devcl_deliversubrutinen anropas precis innan Varnish skickar svaret till klienten. Du kan använda detta för att lägga till eller ändra rubriker som klienten kommer att se.
sub vcl_deliver { # Lägg till en anpassad rubrik för att indikera att svaret cachelagras av Varnish set resp.http.X - Cached - By = "Farnish"; }
I det här exemplet lägger vi till en anpassad rubrikX - Cachad - Avför att låta klienten veta att svaret cachades av Varnish.
Avancerade scenarier för cachelagring
Låt oss titta på några mer avancerade scenarier för att ställa in cachehuvuden.
Cache-busting
Ibland vill du tvinga webbläsaren att hämta en ny version av en resurs, även om den fortfarande är inom cachetiden. Du kan göra detta genom att lägga till ett versionsnummer eller en hash till resursens URL. I VCL kan du hantera detta genom att ta bort versionsnumret från URL:en innan du skickar det till backend.
sub vcl_recv { if (req.url ~ "\?v=[0 - 9]+$") { set req.url = regsub(req.url, "\?v=[0 - 9]+$", ""); } }
Denna kod tar bort?v=123del från URL:en, så att Varnish kan cachelagra resursen baserat på den ursprungliga URL:en utan versionsnumret.
Villkorlig cachelagring
Du kanske bara vill cachelagra en resurs om vissa villkor är uppfyllda. Till exempel kan du bara cachelagra en sida om den har en specifik HTTP-statuskod.
sub vcl_backend_response { if (beresp.status == 200) { set beresp.ttl = 3600s; set beresp.http.Cache - Kontroll = "offentlig, max - ålder=3600"; } else { set beresp.ttl = 0s; set beresp.http.Cache - Kontroll = "nej - cache"; } }
Här cachar vi framgångsrika svar (statuskod 200) i en timme, men inte andra svar.
Använda våra lackprodukter
På vårt företag erbjuder vi ett utbud av Varnish-relaterade produkter som kan göra det ännu enklare att konfigurera och hantera HTTP-cachinghuvuden. Till exempel vårVattenbaserad matt topplackär ett utmärkt alternativ för webbplatser som vill ha en jämn, matt finish samtidigt som de drar nytta av optimerad caching. Den levereras med förkonfigurerade VCL-mallar som du enkelt kan anpassa för att passa dina specifika behov.
VårVattenbaserad polyuretanglansär ett annat utmärkt val. Den ger ett högblankt utseende och har avancerade cachefunktioner inbyggda. Du kan använda den för att cachelagra olika typer av resurser med olika cachetider, beroende på dina krav.
Och om du letar efter en mer generell lösning, vårVattenbaserad klarlackslackär ett utmärkt alternativ. Det erbjuder ett tydligt, skyddande lager för din webbplats resurser och hjälper till att ställa in effektiva cachningshuvuden.
Kontakta oss för köp
Om du är intresserad av att lära dig mer om våra Varnish-produkter eller behöver hjälp med att ställa in HTTP-cachehuvuden i Varnish VCL, tveka inte att höra av dig. Vi har ett team av experter som kan guida dig genom processen och hjälpa dig att få ut det mesta av din caching-inställning. Oavsett om du är ett litet företag med en enkel webbplats eller ett stort företag med komplexa cachningsbehov, har vi dig täckt.
Referenser
- Lackdokumentation
- HTTP Caching RFC (RFC 7234)
Så, där har du det! Att ställa in HTTP-cachehuvuden i Varnish VCL kan verka lite komplicerat till en början, men med rätt kunskap och våra produkter kan du optimera din webbplats prestanda och ge dina användare en bättre upplevelse.
