Vynutit ukládání do mezipaměti Varnish na LWS

Procédure

V této dokumentaci vám krok za krokem vysvětlíme, jak přimět Varnish i prohlížeče, aby vaše ресурсы udržovaly v cache, i když tyto posílají požadavky Pragma: no‑cache nebo Cache‑Control: no-cache.

1. Kontext a architektura LWS

Tarify sdíleného hostingu a spravovaného cPanel/VPS od LWS vycházejí ze stacku:

Prohlížeč ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX zajišťuje TLS a kompresi obsahu.
  • Varnish (Fastest Cache) je nasazen jako reverzní proxy pro ukládání HTTP odpovědí do paměti.
  • Apache nebo PHP‑FPM generují finální odpověď, když Varnish nemá HIT.

Když je vše správně nakonfigurováno, může Varnish doručovat až 1000krát rychleji než přímý přístup k PHP, a zároveň odlehčuje CPU serveru.

2. Připomenutí: jak Varnish rozhoduje o ukládání do cache?

Prvek Dopad na cache Jak jej ovlivnit
Metoda Vhodné jsou pouze GET a HEAD Pro veřejné stránky se vyhněte POST
Odpovědní hlavičky Cache-Control, Expires, Pragma Určují dobu a rozsah Nastavit přes .htaccess (viz §3)
Cookies / Set-Cookie Přítomnost cookie = ve výchozím stavu bez ukládání do cache Odstranit nebo neutralizovat zbytečné cookies
HTTP status 200, 203, 301, 302, 404, 410 jsou cacheovatelné Bez zásahu, ale vyhněte se 500!

Trucs et astuces


Varnish ve výchozím nastavení ignoruje Cache-Control: no-cache odeslaný prohlížečem pro statické soubory, ale respektuje „revalidation logic“, pokud je objekt již v cache.

3. Ovládání životnosti přes .htaccess

Aktivujte modul mod_headers (u LWS je to ve výchozím stavu) a poté vložte následující úryvek tam, kam chcete:

⌨ Příkaz

  Header set Cache-Control "public, max-age=3600, s-maxage=3600, stale-while-revalidate=60, stale-if-error=86400"
  Header set Expires "Thu, 31 Dec 2037 23:55:55 GMT"
  • max-age : doba (v sekundách) v prohlížeči.
  • s-maxage : specifická doba pro sdílené cache (Varnish/CDN).
  • stale-while-revalidate : umožňuje Varnishi obsloužit zastaralý obsah, zatímco jej na pozadí obnovuje.
  • stale-if-error : podá zastaralou verzi, pokud backend odpoví chybou (fail-safe).

3.1. Cílení podle složky

Umístění stejného souboru .htaccess do složky "/images/" použije pravidlo pouze na složku "images".

3.2. Cílení podle přípony

⌨ Příkaz

  
    Header set Cache-Control "public, max-age=2592000, s-maxage=2592000, immutable"
  

immutable : říká prohlížeči, že není nutná žádná revalidace, dokud objekt nevyprší; ideální pro verzované soubory (style.483bf.css).

3.3. Krátká cache pro HTML

⌨ Příkaz

  Header set Cache-Control "public, max-age=300, s-maxage=600, must-revalidate"

Expiruje po 5 min na straně klienta a po 10 min na straně Varnishe, poté je revalidace povinná.

4. Praktické scénáře použití

Reálný případ Úryvek z .htaccess Proč?
Landing page aktualizovaná každou hodinu max-age=600, s-maxage=1200 Návštěvníci mají data „téměř live“ bez zatížení PHP
Verzované CSS/JS max-age=31536000, immutable Téměř nulový provoz na serveru, okamžité načítání
Obrázky produktů e‑commerce max-age=604800 Snižuje TTFB, zrychluje katalog
Back‑office / wp-admin no-store, private Brání ukládání citlivých dat do sdílené cache

5. Vymazání nebo invalidace cache

Z vašeho hostingu (PHP skript vašeho webu, úloha Cron nebo SSH terminál) nevyžaduje vyprázdnění cache Varnish žádný token:

  • Jedna stránka:
⌨ Příkaz
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • Celý adresář pomocí regulárního výrazu:
⌨ Příkaz
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • Celý web:
⌨ Příkaz
curl -X FULLPURGE https://exemple.com
  • V PHP, například po aktualizaci obsahu:
Kód
$ch = curl_init('https://exemple.com/chemin/page.html');
curl_setopt_array($ch, [CURLOPT_CUSTOMREQUEST => 'PURGE', CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 20]);
curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE); // 200 : cache purge ; 405 : purge refusee
curl_close($ch);

Kompletní skript připravený pro úlohu Cron je uveden v nápovědě Zrychlení vašeho webu pomocí Fastest Cache. Cache můžete také vymazat z panelu tlačítkem „Purger le cache“ ve Fastest Cache.

6. Testování a ladění

⌨ Příkaz
curl -I https://exemple.com/style.css

Sledujte:

  • Age: 356 → Varnish obsloužil odpověď starou 356 s.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (nebo MISS).

V Chrome/Edge: DevTools > Network > Disable cache může simulovat prvního návštěvníka.

7. Časté chyby

  1. Zbytečné cookies : mnoho WordPress šablon nastavuje cookie i pro veřejné stránky. Odstraňte je nebo je deaktivujte přes functions.php.
  2. Řetězce dotazů : ve výchozím nastavení ?v=123 vytvoří novou položku v cache. Raději verzujte v názvu souboru.
  3. Citlivý obsah : formuláře, stránky klientské zóny ➡ no-store, private, max-age=0.
  4. Kompresie Brotli/Gzip : aktivujte je před vrstvou Varnish, abyste se vyhnuli dvojitému ukládání do cache.

8. Shrnutí doporučených postupů

  • Používejte s-maxage ⩾ max-age, abyste zachovali proxy cache déle než cache prohlížeče.
  • Nastavte immutable u každého souboru, jehož název obsahuje hash.
  • Nespojujte zastaralé Expires s max-age, ledaže jde o starší prohlížeče.
  • Zdokumentujte své TTL v souboru CACHE_POLICY.md pro tým.

9. Užitečné zdroje

✅ Vaše cache Varnish je nyní pod kontrolou!

help.lws.net/a/1949
Byl pro vás tento článek užitečný?

Ano

Ne

Přečteno 7 648×

Děkujeme! Neváhejte se ptát na naši dokumentaci, pokud chcete více informací, a pomozte nám ji zlepšit.

Podobné články

Máte otázku k tomuto článku?

Položte ji týmu LWS a komunitě. Odpověď bude zveřejněna po kontrole moderátorem.

Položte týmu LWS a jeho komunitě otázku

GDPR: Správce: LWS-Ligne Web Services. Účel: moderace a veřejné zveřejnění vašeho dotazu, případné upozornění na odpověď. Právní základ: souhlas (čl. 6 odst. 1 písm. a GDPR). Uchovávání e-mailů: 90 dní po upozornění, nejvýše 12 měsíců bez odpovědi. Pro uplatnění svých práv viz oddíl GDPR našich obchodních podmínek.