GNU/Linux >> Znalost Linux >  >> Linux

Jak ukládat statické soubory do mezipaměti na nginx

Tento tutoriál vysvětluje, jak můžete nakonfigurovat nginx tak, aby nastavil hlavičku Expires HTTP a direktivu max-age hlavičky Cache-Control HTTP statických souborů (jako jsou obrázky, CSS a soubory Javascript) na datum v budoucnosti, aby tyto soubory budou ukládány do mezipaměti prohlížečů vašich návštěvníků. To šetří šířku pásma a zrychluje zobrazení vašeho webu (pokud uživatel navštíví váš web podruhé, statické soubory budou načteny z mezipaměti prohlížeče).

1 předběžná poznámka

Předpokládám, že máte funkční nastavení nginx, např. jak je uvedeno v tomto tutoriálu: Instalace Nginx s PHP 7 a MySQL 5.7 (LEMP) na Ubuntu 16.04 LTS

2 Konfigurace nginx

HTTP hlavičku Expires lze nastavit pomocí direktivy expires, kterou lze umístit do bloku http {}, serveru {}, umístění {} nebo příkazu if uvnitř bloku umístění {}. Obvykle jej použijete v lokačním bloku pro vaše statické soubory, např. takto:

location ~*  \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}

Ve výše uvedeném příkladu mají všechny soubory .jpg, .jpeg, .png, .gif, .ico, .css a .js záhlaví Expires s datem 365 dní v budoucnosti od času přístupu prohlížeče. Proto byste se měli ujistit, že blok umístění {} skutečně obsahuje pouze statické soubory, které mohou prohlížeče uložit do mezipaměti.

Znovu načtěte nginx po provedených změnách:

/etc/init.d/nginx reload

S direktivou expires můžete použít následující nastavení času:

  • off znamená, že záhlaví Expires a Cache-Control nebudou změněna.
  • epocha nastavuje záhlaví Expires na 1. ledna 1970 00:00:01 GMT.
  • max nastaví záhlaví Expires na 31. prosince 2037 23:59:59 GMT a maximální věk Cache-Control na 10 let.
  • Čas bez předpony @ znamená dobu vypršení platnosti vzhledem k času přístupu prohlížeče. Lze zadat záporný čas, který nastaví hlavičku Cache-Control na no-cache. Příklad:vyprší 10d; nebo vyprší 14w3d;
  • Čas s předponou @ určuje absolutní denní dobu vypršení, zapsanou ve tvaru Hh nebo Hh:Mm, kde H je v rozsahu 0 až 24 a M je v rozsahu 0 až 59. Příklad:vyprší @ 15:34;

Můžete použít následující časové jednotky:

  • ms:milisekundy
  • s:sekund
  • m:minuty
  • h:hodiny
  • d:dny
  • w:týdny
  • M:měsíce (30 dní)
  • y:roky (365 dní)

Příklady:1h30m na ​​jednu hodinu třicet minut, 1y6M na jeden rok a šest měsíců.

Všimněte si také, že pokud použijete hlavičku Expires ve vzdálené budoucnosti, musíte změnit název souboru komponenty, kdykoli se komponenta změní. Proto je dobré verzovat soubory. Pokud máte například soubor javascript.js a chcete jej upravit, měli byste k názvu souboru upraveného souboru přidat číslo verze (např. javascript-1.1.js), aby si jej prohlížeče musely stáhnout. Pokud nezměníte název souboru, prohlížeče načtou (starý) soubor ze své mezipaměti.

Místo toho, aby hlavička Expires vycházela z doby přístupu prohlížeče (např. expiruje 10d;), můžete ji také založit na datu úpravy souboru (upozorňujeme, že to funguje pouze pro skutečné soubory, které jsou uloženy na pevném disku! ) pomocí upraveného klíčového slova, které předchází čas:

expires modified 10d;

3 Testování

Chcete-li otestovat, zda vaše konfigurace funguje, můžete použít funkci analýzy sítě nástrojů pro vývojáře v prohlížeči Firefox a přistupovat ke statickému souboru prostřednictvím Firefoxu (např. obrázek). Ve výstupu Header byste nyní měli vidět hlavičku Expires a hlavičku Cache-Control s direktivou max-age (max-age obsahuje hodnotu v sekundách, například 31536000 je jeden rok v budoucnosti):

  • nginx HttpHeadersModule:http://wiki.nginx.org/HttpHeadersModule

O autorovi

Falko Timme je vlastníkem Timme Hosting (ultrarychlý webhosting nginx). Je hlavním správcem HowtoForge (od roku 2005) a jedním z hlavních vývojářů ISPConfig (od roku 2000). Přispěl také do O'Reillyho knihy „Linux System Administration“.


Linux
  1. Jak používat Nginx k přesměrování

  2. Jak povolit HTTP2 v NGINX

  3. Jak nastavit nginx max otevřené soubory?

  1. nginx - 413 entita požadavku je příliš velká

  2. Jak zakázat ETag v NGINX

  3. Jak odstranit miliony souborů bez narušení serveru

  1. Jak najít soubory v Linuxu

  2. Jak povolit TLS 1.3 v Nginx

  3. Jak povolit IPv6 v Nginx?