NGINX a nastavení cache u PHP generovaných obrázků a statických souborů
Správné nastavení cache u statického obsahu může znatelně zlepšit rychlost načítání stránek
Pro statický obsah, který se po dobu své existence nemění (obrázky, css soubory s vygenerovaným unikátním jménem atd.) je výhodné posílat v hlavičce i informaci o jeho expiraci. Pokud se jedná o obsah, který má být teprve vygenerován prvním přístupem, je potřeba pro tento první request zajistit přesměrování na správný soubor. Tím bývá front controller celé aplikace, což bývá index.php. Tato situace nastává často u generování náhledových obrázků, např. pomocí LiipImagineBundle
Vlastní zápis v konfiguraci NGINX je jednoduchý a může vypadat např takto:
location ~* \.(jpg|jpeg|png|webp|gif|ico|css|js|woff2)$ {
expires 365d;
try_files $uri /index.php$is_args$args;
}
Pro srozumitelnost uvedu i význam jednotlivých částí zápisu a použitých proměnných:
- location ~* - direktiva platná pro request odpovídající uvedenému regulárnímu výrazu. V tomto konkrétním případě nastavujeme cache pro obrázky, css, js a fonty.
- expires 365d - expiraci nastavujeme na 365 dní
- $uri - normalizované URI z requestu
- $is_args - ? (otazník) pokud request obsahuje GET parametry, jinak prázdný řetězec
- $args - vlastní GET parametry
Odkaz do NGINX dokumentace na všechny dostupné proměnné je zde