Wymuś buforowanie Varnish na LWS

Procédure

W tej dokumentacji wyjaśnimy krok po kroku, jak zmusić Varnish i przeglądarki do przechowywania Twoich zasobów w pamięci podręcznej, nawet gdy wysyłają one żądania Pragma: no‑cache lub Cache‑Control: no-cache.

1. Kontekst i architektura LWS

Pakiety hostingu współdzielonego oraz zarządzane cPanel/VPS od LWS opierają się na stosie:

Przeglądarka ⇄ NGINX (SSL + HTTP/2) ⇄ Varnish Cache ⇄ Apache/PHP-FPM

  • NGINX obsługuje TLS i kompresuje treści.
  • Varnish (Fastest Cache) jest ustawiony jako reverse-proxy do buforowania odpowiedzi HTTP w pamięci.
  • Apache lub PHP-FPM generują końcową odpowiedź, gdy Varnish nie ma HIT.

Gdy wszystko jest poprawnie skonfigurowane, Varnish może dostarczać treści nawet do 1000 razy szybciej niż bezpośredni dostęp do PHP, jednocześnie odciążając procesor serwera.

2. Przypomnienie: jak Varnish decyduje o buforowaniu?

Element Wpływ na pamięć podręczną Jak to kontrolować
Metoda Tylko GET i HEAD są kwalifikowane Unikać POST dla publicznych stron
Nagłówki odpowiedzi Cache-Control, Expires, Pragma Określają czas trwania i zakres Ustawić przez .htaccess (zob. §3)
Cookies / Set-Cookie Obecność cookie = brak buforowania domyślnie Usunąć lub zneutralizować niepotrzebne cookies
Status HTTP 200, 203, 301, 302, 404, 410 mogą być buforowane Brak działania, ale unikać 500 !

Trucs et astuces


Varnish domyślnie ignoruje Cache-Control: no-cache wysyłany przez przeglądarkę dla plików statycznych, ale respektuje logikę "revalidation" jeśli obiekt jest już w cache.

3. Kontrolowanie czasu życia przez .htaccess

Aktywuj moduł mod_headers (jest to domyślnie włączone w LWS), a następnie wstaw poniższy fragment tam, gdzie chcesz:

⌨ Polecenie

  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 : czas trwania (w sekundach) w przeglądarce.
  • s-maxage : czas specyficzny dla współdzielonych pamięci podręcznych (Varnish/CDN).
  • stale-while-revalidate : pozwala Varnishowi serwować przestarzałą treść, podczas gdy odświeża ją w tle.
  • stale-if-error : serwuje wersję przestarzałą, jeśli backend zwróci błąd (fail-safe).

3.1. Celowanie według katalogu

Umieszczenie tego samego pliku .htaccess w katalogu "/images/" zastosuje regułę wyłącznie do katalogu "images".

3.2. Celowanie według rozszerzenia

⌨ Polecenie

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

immutable : informuje przeglądarkę, że nie ma potrzeby ponownej walidacji, dopóki obiekt nie wygaśnie; idealne dla plików wersjonowanych (style.483bf.css).

3.3. Krótki cache dla HTML

⌨ Polecenie

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

Wygasa po 5 min po stronie klienta i po 10 min po stronie Varnisha, a następnie wymagana jest ponowna walidacja.

4. Praktyczne scenariusze użycia

Rzeczywisty przypadek Fragment .htaccess Dlaczego?
Landing page aktualizowana co godzinę max-age=600, s-maxage=1200 Użytkownicy otrzymują dane „prawie na żywo” bez przeciążania PHP
Wersjonowane CSS/JS max-age=31536000, immutable Praktycznie zerowy ruch na serwerze, natychmiastowe ładowanie
Zdjęcia produktów e-commerce max-age=604800 Zmniejsza TTFB, przyspiesza katalog
Panel administracyjny / wp-admin no-store, private Zapobiega zapisywaniu wrażliwych danych we współdzielonej pamięci podręcznej

5. Czyszczenie lub unieważnianie cache

Ze swojego hostingu (skrypt PHP Twojej strony, zadanie Cron lub terminal SSH) czyszczenie cache Varnish nie wymaga żadnego tokena:

  • Jedna strona:
⌨ Polecenie
curl -X PURGE https://exemple.com/chemin/ressource.jpg
  • Cały katalog, za pomocą wyrażenia regularnego:
⌨ Polecenie
curl -X PURGE -H 'X-Purge-Method: regex' 'https://exemple.com/images/.*'
  • Cała witryna:
⌨ Polecenie
curl -X FULLPURGE https://exemple.com
  • W PHP, na przykład po aktualizacji treści:
Kod
$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 refusée
curl_close($ch);

Pełny skrypt, gotowy do użycia w zadaniu Cron, jest dostępny w pomocy Przyspieszenie działania Twojej strony dzięki Fastest Cache. Możesz też wyczyścić cache z poziomu panelu, przyciskiem „Wyczyść cache” w Fastest Cache.

6. Testowanie i debugowanie

⌨ Polecenie
curl -I https://exemple.com/style.css

Zwróć uwagę na:

  • Age: 356 → Varnish podał odpowiedź mającą 356 s.
  • Cache-Control: public, max-age=2592000, s-maxage=2592000, immutable
  • X-Cache: HIT (lub MISS).

W Chrome/Edge: DevTools > Network > Disable cache może zasymulować pierwszego odwiedzającego.

7. Typowe pułapki

  1. Niepotrzebne cookies : wiele motywów WordPress ustawia cookie nawet dla publicznych stron. Usuń je lub wyłącz w functions.php.
  2. Łańcuchy zapytań : domyślnie ?v=123 tworzy nowy wpis w pamięci podręcznej. Lepiej wersjonować w nazwie pliku.
  3. Treści wrażliwe : formularze, strony strefy klienta ➡ no-store, private, max-age=0.
  4. Kompresja Brotli/Gzip : włącz ją przed warstwą Varnish, aby uniknąć podwójnego buforowania.

8. Podsumowanie dobrych praktyk

  • Używaj s-maxage ⩾ max-age, aby utrzymać cache proxy dłużej niż cache przeglądarki.
  • Ustaw immutable dla każdego pliku, którego nazwa zawiera hash.
  • Nie mieszaj przestarzałego Expires z max-age, chyba że dla starych przeglądarek.
  • Dokumentuj swoje TTL w pliku CACHE_POLICY.md dla zespołu.

9. Przydatne zasoby

✅ Twój cache Varnish jest teraz pod kontrolą!

help.lws.net/a/1949
Czy ten artykuł był pomocny?

Tak

Nie

Przeczytano 7 648 razy

Dziękujemy! Zadawaj pytania dotyczące naszej dokumentacji, jeśli potrzebujesz więcej informacji, i pomóż nam ją ulepszyć.

Podobne artykuły

Masz pytanie dotyczące tego artykułu?

Zadaj je zespołowi LWS i społeczności. Odpowiedź zostanie opublikowana po moderacji.

Zadaj pytanie zespołowi LWS i jego społeczności

RODO: Administrator: LWS-Ligne Web Services. Cel: moderacja i publiczna publikacja pytania, ewentualne powiadomienie o odpowiedzi. Podstawa prawna: zgoda (art. 6 ust. 1 lit. a RODO). Przechowywanie adresów e-mail: 90 dni po powiadomieniu, maksymalnie 12 miesięcy bez odpowiedzi. Aby skorzystać ze swoich praw, zobacz sekcję RODO naszego regulaminu.