Hur att Konfigurera Cache-Control Rubriker i NGINX

0
205

Caching är processen för att lagra ner data för senare användning, där det kan läsas från disk istället för att begära det igen. Att göra korrekt användning av din webbläsare och CDN caching kan snabba upp din webbplats betydligt.

Hur Fungerar Cachning Fungerar?

Varje användares webbläsare har en inbyggd cache, som lagrar statiska objekt laddas ner från webbplatser. Nästa gång de ansluter, om de objekt de är begär är fortfarande i cache-minnet, det kommer att ladda från minnet snarare än att be om det igen, för att snabba upp prestandan avsevärt och minskar belastningen på din webbserver i den processen.

Webbläsaren är en client-side-cache. Men många stora webbplatser kommer också att använda ett Content Delivery Network, eller CDN. CDN sitter framför din webbserver, och cachar dina sidor på servern, vanligtvis på flera edge-servrar runt om i världen. Detta förbättrar tillgången latens, prestanda och minskar belastningen på din webbserver. Om du skulle vilja lära dig mer om Cdn, kan du läsa vår guide om dem här.

Cache-Control är en header som du kan konfigurera webbservern för att lägga till alla utgående förfrågningar. Med hjälp av det kan du ange vilka resurser får cachas, och för hur länge. Det finns ett par saker att notera dock, innan du går och lägger till det hela webbplatsen.

Vissa sidor bör aldrig vara cachad. Något som kräver en användare att logga in i bör inte vara cachas av en CDN, eller annat du kommer att riskera att visa en användares personliga information till andra. Du kan fortfarande cache dessa typer av sidor på webbläsaren sidan av på egen hand (genom att ställa in Cache-Control till privata). Som en allmän regel, om den sidan kommer att vara exakt samma för alla användare, som din startsida, kan du cache. Statiska resurser, som CSS och bilder, oftast kan cachas, ofta mycket längre.

Du kommer också vill se till att du ställer rimliga Time-To-Live (TTL) värden för varje resurs. TTL styr hur långt objektet kommer att bo i cache innan de blir ogiltiga, som uppmanar användaren att begära ett nytt objekt. Trade-off här är mellan en lång caching tid och snabba uppdateringar. Vill du inte cache din hemsida för ett helt år, eftersom du kanske ändra något på tisdagen. Att sätta en max ålder runt ett par minuter för att din hemsida är tillräckligt lång för att täcka omedelbara laddar, och tillräckligt snabb för att möjliggöra ett snabbt spridning av uppdateringar. Men för statiska resurser som bilder, de kan aldrig ändra och du ska vara bra för att fastställa höga TTL-värden, och med så mycket som två år.

Du kan alltid använda versionshanterade filnamn för att utlösa en cache ladda om. Om du släpper en ny version av en CSS-formatmall kan du namnge det stilar-1.0.1.css, och användarens webbläsare (och alla Cdn framför det) kommer att se det som en ny fil, som måste vara redownloaded. Dessutom, för vissa Cdn, kan du fråga manuell invalidations att spola befintliga cache utan att ändra alla filnamn.

Hur man Använder Cache-Control i NGINX

Cache-Control har ett par alternativ:

  • allmänna – Kan cachas av vem som helst, inklusive webbläsare och Cdn. Använda denna för de flesta statiska objekt.
  • privat – Innehåller känsliga uppgifter som inte kan cachelagras av Cdn eller omvänd proxy. Användarens webbläsare kan cachas lokalt. Använda denna för de flesta autentiserade sidor.
  • no-cache – Trots namnet betyder det inte att inaktivera cachelagring. Det kan hända att det fortfarande cache svaret för prestanda, utan måste kontrollera med ursprung server för uppdateringar innan du använder det. Använd detta om du vill att användaren ska förlänga varje gång
  • no-store – Inaktiverar cachelagring helt och hållet. Använd det här bara för mycket känsliga data som inte skickas två gånger.

Vid inställning av max-ålder, det är alltid gjort på några sekunder. Men NGINX tillåter några mer anpassade värden:

  • -1, eller mindre, vilket kommer att stänga av cachning, och inte ändra befintliga rubriker
  • epok, som till Unix-tid noll, vilket kommer att uttryckligen stänga av cachning och rensa alla cachar (användbart om du använder NGINX som en reverse proxy)
  • max, som kommer att löpa ut när universum slutar den 31 December 2037
  • På 30-talet, för att sekunder
  • 1m minuter
  • 24 timmar
  • 3d dagar
  • 1M, för månader
  • 2y, för år

Dessutom kan du lägga till no-förändra direktivet, som inaktiverar alla omvandlingar som kan göras för att resursen. Till exempel, vissa Cdn bilder komprimera för att minska bandbredden. Detta direktiv inaktiverar det beteendet.

För NGINX, du kan ändra Cache-Control rubriker med följande direktiv:

går ut 1y;
add_header Cache-Control “offentliga, inga-transform”;

Den första raden anger max-ålder till 1 år, och andra uppsättningar allmänheten och inga-transform caching inställningar. Du kan lägga till detta till en server block att tillämpa webbplats brett, men en bättre metod är att matcha filändelser med en plats blocket för att ställa in olika värden beroende på den file extension:

läge ~* .(?:css|js)$ {
går ut 1y;
add_header Cache-Control “offentliga”;
}

Detta läge block använder ett reguljärt uttryck som matchar, betecknas med ~. Detta är användbart för att tillämpa de allmänna inställningarna för typ av innehåll. Om du vill göra undantag för vissa platser, kan du använda en vanlig plats block, som kommer att ha företräde framför en regex match.

plats /profil {
går ut 2d;
add_header Cache-Control “offentliga, inga-transform”;
}

Du kan också använda den = modifierare, som matchar vägar exakt, och kommer att äga företräde framför en regex match och en standard läge block.

Använd Surrogat-Kontrollen för att Ändra Beteende CDN

Även om du kan inaktivera CDN caching och fortfarande utnyttja browser caching genom att använda Cache-Control: privat, det är bättre att ha direkt kontroll över det. De flesta Cdn kommer att respektera Surrogat-Kontroll header, som fungerar exakt samma som Cache-Control, med undantag endast avsedd för Cdn. På detta sätt, kan du berätta Fastly att göra en sak, och att användaren kan göra annat.

I NGINX, måste du ställa denna rubrik manuellt och ställ in max-ålder värde istället för att använda NGINX s direktiv upphör att gälla.

add_header Surrogat-Kontroll “för allmänheten, max-age=86400”;
add_header Cache-Control “offentliga, max-age=120”;

Du kommer definitivt vill testa med din CDN för att verifiera att det fungerar—Surrogat-Kontroll är ganska nytt, och är inte universell.