Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator reguł cache Nginx

Cache zasobów statycznych i proxy

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Ustaw czas cache i kliknij „Generuj reguły”.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator reguł cache Nginx

Cache to najprostszy sposób na przyspieszenie strony. Zasoby statyczne (obrazy, CSS, JS) zmieniają się rzadko, więc przeglądarka może trzymać je długo. Nginx decyduje, jak długo.

Jak długo cache’ować?

ZasóbZalecany czas
Obrazy (jpg, png, webp)30 dni – 1 rok
CSS i JavaScript30 dni – 1 rok (z hashem w nazwie)
Czcionki1 rok
Pliki HTMLkrótko lub bez cache

Plikom z hashem w nazwie (np. app.a1b2c3.js) można ustawić cache „na zawsze” — zmiana treści zmienia nazwę pliku.

Cache proxy

Gdy Nginx stoi przed aplikacją (PHP, Node), można cache’ować całe odpowiedzi. Wymaga to strefy proxy_cache_path w bloku http i włączenia cache w lokalizacji proxy.

Jak działa expires i skąd bierze się czas cache

Dyrektywa expires nie jest osobnym mechanizmem przechowywania plików. To instrukcja dla Nginx, aby do odpowiedzi dołożył dwa nagłówki: Expires z datą bezwzględną oraz Cache-Control z wartością max-age podaną w sekundach. Zapis 30d jest przez Nginx przeliczany na 2 592 000 sekund, a 1y na 31 536 000 sekund, jeśli rok liczysz jako 365 dni. Data w nagłówku Expires powstaje przez dodanie tego czasu do momentu wygenerowania odpowiedzi, dlatego przy każdym pobraniu pliku jest inna.

Zasada działania jest prosta: przez cały czas ważności wpisu przeglądarka korzysta z kopii lokalnej i nie wysyła zapytania do serwera. Dopiero po przekroczeniu max-age wraca po plik, zwykle z zapytaniem warunkowym, na które serwer odpowiada kodem 304, jeśli treść się nie zmieniła. Nagłówek immutable zmienia to zachowanie: mówi przeglądarce, że plik nigdy się nie zmieni, więc nie rewaliduje go nawet przy odświeżeniu strony. Ma to sens wyłącznie dla plików z hashem w nazwie, bo wtedy każda zmiana treści tworzy nowy adres.

Drugi poziom to proxy_cache, czyli cache trzymany po stronie serwera, a nie przeglądarki. Tu liczą się trzy elementy: strefa pamięci opisana w proxy_cache_path, klucz wpisu budowany między innymi z metody i adresu URI oraz czas ważności odpowiedzi. Nginx sam decyduje, czy oddać zapisany wpis, czy przepuścić żądanie do aplikacji, a stan decyzji pokazuje nagłówek X-Cache-Status z wartościami takimi jak HIT, MISS, EXPIRED, STALE albo BYPASS. Te dwa mechanizmy się nie zastępują: expires przyspiesza kolejne wizyty użytkownika, a proxy_cache odciąża aplikację przy ruchu od wielu różnych osób.

Przykład krok po kroku dla typowego serwisu

  1. Policz zasoby w projekcie. Załóżmy, że strona ma 120 obrazów, 8 plików CSS i JS bez hasha w nazwie, 5 plików CSS i JS z hashem oraz 3 pliki czcionek. Razem 136 plików statycznych.
  2. Dla obrazów ustaw 30 dni, czyli najkrótszą wartość z zalecanego zakresu. W sekundach to 30 razy 86 400, czyli 2 592 000. W konfiguracji zapisujesz to jako expires 30d.
  3. Dla 8 plików bez hasha zostaw 30 dni, czyli 2 592 000 sekund. Bezpieczniej jest trzymać je krócej, bo po podmianie treści użytkownik z kopią lokalną zobaczy starą wersję aż do wygaśnięcia wpisu.
  4. Dla 5 plików z hashem w nazwie ustaw 1 rok, czyli 365 razy 86 400, czyli 31 536 000 sekund, i dodaj nagłówek immutable. Zmiana treści zmieni nazwę pliku, więc stara kopia nie jest problemem.
  5. Dla 3 plików czcionek ustaw również 1 rok, czyli 31 536 000 sekund, w osobnym bloku location obejmującym rozszerzenia woff, woff2, ttf, otf i eot.
  6. Pliki HTML zostaw bez cache albo z bardzo krótkim czasem, a dla odpowiedzi z aplikacji włącz proxy_cache dla żądań GET. Na koniec sprawdź wynik w narzędziach deweloperskich, a przy proxy także nagłówek X-Cache-Status.

Wynik: 8 plików, czyli 5 z hashem i 3 czcionki, przeglądarka trzyma przez 365 dni bez odpytywania serwera, a pozostałe 128 plików odświeża po 30 dniach, czyli po 2 592 000 sekundach.

Czas cache i wartość w sekundach

Typ zasobuZalecany czasWartość w sekundach
Obrazy jpg, png, webp30 dni2 592 000
CSS i JS bez hasha w nazwie30 dni2 592 000
CSS i JS z hashem w nazwie30 dni do 1 roku2 592 000 do 31 536 000
CSS i JS z hashem plus immutable1 rok31 536 000
Czcionki1 rok31 536 000
Dowolny plik z hashem w nazwiepraktycznie na zawsze, czyli 1 rok31 536 000
Pliki HTMLkrótko lub bez cache0 lub wartość bliska zeru

Jak używać generatora w praktyce

  • Jeden location na kategorię plików — obrazy, style i skrypty oraz czcionki mają różne zalecane czasy, więc trzymaj je w osobnych blokach location. Łatwiej wtedy zmienić jedną wartość bez ruszania pozostałych reguł.
  • Nie mieszaj expires z ręcznym Cache-Control — jeśli dodajesz Cache-Control przez add_header, a obok stoi expires, w odpowiedzi mogą pojawić się sprzeczne wartości. Wybierz jeden sposób ustawiania czasu życia i trzymaj się go w całej konfiguracji.
  • immutable tylko z hashem — nagłówek ten zakłada, że plik nigdy się nie zmieni. Bez hasha w nazwie po podmianie treści użytkownik nie dostanie nowej wersji, dopóki nie wyczyści cache ręcznie.
  • Zaczynaj od krótszego czasu — jeśli nie masz pewności, jak często zmieniają się zasoby, ustaw dolny koniec zakresu, czyli 30 dni. Wydłużenie do roku wykonaj dopiero po sprawdzeniu, że wdrożenia nie zaskakują użytkowników.
  • Rozdziel cache przeglądarki od cache proxy — expires działa lokalnie u użytkownika i nie wymaga zmian w aplikacji. proxy_cache wymaga strefy w bloku http i włączenia w lokalizacji proxy oraz ostrożności przy treściach spersonalizowanych.

Czego generator nie uwzględnia

  • Nie zna Twojego ruchu i wzorca wdrożeń — narzędzie podaje wartości typowe dla danego typu zasobu, a nie dopasowane do częstotliwości publikacji w konkretnym projekcie. Przy codziennych wdrożeniach nawet 30 dni dla plików bez hasha bywa zbyt długo.
  • Nie wykryje hasha w nazwie pliku — decyzję o tym, czy plik ma wersjonowaną nazwę, podejmuje operator. Generator nie analizuje projektu ani listy plików, więc nie zgadnie, czy można bezpiecznie dodać immutable.
  • Pomija warstwy przed Nginx — CDN, serwer pośredniczący albo proxy firmowe mogą nadpisywać lub ignorować nagłówki. Efekt w przeglądarce może się wtedy różnić od tego, co generuje konfiguracja.
  • Nie sprawdza poprawności całej konfiguracji — wynik to fragment reguł do wklejenia. Kolejność bloków, kontekst http, server i location oraz składnia całości pozostają po Twojej stronie.

Najczęstsze pytania

Co daje nagłówek immutable?

Mówi przeglądarce, że plik nigdy się nie zmieni, więc nie musi go rewalidować przy odświeżeniu strony. Stosuj tylko dla zasobów z hashem w nazwie.

Czy cache proxy jest bezpieczny?

Trzeba uważać na dane zalogowanych użytkowników — nie cache’uj odpowiedzi spersonalizowanych. Zwykle wyłącza się cache dla ciasteczek sesyjnych i metod innych niż GET.

Jak zweryfikować cache?

Sprawdź nagłówki odpowiedzi w narzędziach deweloperskich (Cache-Control, Expires) i nagłówek X-Cache-Status przy proxy cache.

Czy dyrektywa expires nadpisuje nagłówek Cache-Control?

expires dodaje jednocześnie nagłówek Expires z datą i Cache-Control z wartością max-age. Jeśli równolegle ustawiasz Cache-Control przez add_header, w odpowiedzi mogą pojawić się dwie dyrektywy i przeglądarka może wybrać inną, niż zakładasz.

Ile sekund ma 30 dni i rok w konfiguracji Nginx?

30 dni to 2 592 000 sekund, a rok liczony jako 365 dni to 31 536 000 sekund. W konfiguracji wystarczy zapis 30d albo 1y, natomiast w nagłówkach odpowiedzi zobaczysz już wartość w sekundach.

Co oznacza X-Cache-Status MISS, HIT i EXPIRED?

MISS oznacza, że odpowiedzi nie było w cache i Nginx pobrał ją z aplikacji. HIT to trafienie w zapisany wpis, EXPIRED to wpis po upływie czasu ważności, a STALE to przestarzała kopia podana w zastępstwie niedostępnego źródła.

Czy warto ustawiać długi cache dla plików HTML?

Nie, bo dokument HTML zwykle zmienia się przy każdej publikacji i wskazuje nowe wersje zasobów. Ustaw dla niego brak cache albo bardzo krótki czas, a długie czasy zostaw obrazom, stylom, skryptom i czcionkom.

Jak wyczyścić wpis z cache proxy w Nginx?

Najprościej usunąć plik z katalogu cache i przeładować Nginx, a wpis zniknie też sam po upływie czasu ważności lub nieaktywności. Część instalacji korzysta z dodatkowego modułu do czyszczenia po adresie URL, ale wymaga to przebudowy Nginx.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!