Zrozumienie dyrektywy nginx proxy_cache_path

30

Załóżmy, że mam ten plik konfiguracyjny nginx

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Co keys_zone=myCache:8mznaczy W dokumentach niewiele mówi się na ten temat:

Ponadto wszystkie aktywne klucze i informacje o danych są przechowywane w strefie pamięci współużytkowanej, której nazwa i rozmiar są konfigurowane za pomocą parametru keys_zone.

  • Co jeśli proxy_cache_valid( 12h) jest wyższy niż podana inactivewartość ( 1h) w proxy_cache_path? Jakiej zasady będzie przestrzegać? na przykład

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Dzięki!

Jürgen Paul
źródło

Odpowiedzi:

39

Co oznacza keys_zone = myCache: 8m?

Jako dokumentacja mówi , nginx zachowa wszystkie aktywne klucze i informacje dane są przechowywane w pamięci wspólnej strefy, której namei sizesą konfigurowane przez parametr keys_zone. Podsumowując, podzielmy na części

  • /var/cache/nginxto miejsce, w którym przechowywana jest rzeczywista pamięć podręczna. Wewnątrz folderu plik pamięci podręcznej był plikiem binarnym, ale można łatwo znaleźć w nim znacznik html.
  • levels=1:2 Parametr poziomy określa liczbę poziomów podkatalogów w pamięci podręcznej.
  • keys_zone=myCache:8mdefiniował strefę pamięci współdzielonej o nazwie myCache o maksymalnym rozmiarze 8 MB. Przechowuje wszystkie aktywne klucze i metadane pamięci podręcznej. Tak więc, ilekroć nginx sprawdza, czy strona była buforowana, najpierw sprawdza strefę pamięci współużytkowanej, a następnie szuka lokalizacji rzeczywistej pamięci podręcznej, /var/cache/nginxjeśli pamięć podręczna istnieje.
  • max_sizebył maksymalny rozmiar pamięci podręcznej, np. rozmiar plików włączony /var/cache/nginx.
  • inactive=1hOkreśl maksymalny czas nieaktywnej pamięci podręcznej, którą można zapisać. Dane w pamięci podręcznej, które nie są dostępne w czasie określonym przez inactiveparametr, są usuwane z pamięci podręcznej bez względu na ich świeżość.

Jak działa sprawdzanie poprawności i usuwanie pamięci podręcznej

Zaczerpnięte z list mailingowych nginx

  • Dyrektywa proxy_cache_valid określa, jak długo odpowiedź zostanie uznana za prawidłową (i zostanie zwrócona bez żadnych żądań do zaplecza). Po tym czasie odpowiedź zostanie uznana za „nieaktualną” i albo nie zostanie zwrócona, albo będzie zależała od ustawienia proxy_cache_use_stale .

  • Argument nieaktywny dla proxy_cache_path określa, jak długo odpowiedź będzie przechowywana w pamięci podręcznej po ostatnim użyciu. Pamiętaj, że nawet nieaktualne odpowiedzi będą brane pod uwagę ostatnio, jeśli będą do nich żądania.

Jak rozumiem, tutaj pseudokod, jak działa nginx

Kiedy pojawi się żądanie

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

W innym procesie menedżer pamięci podręcznej wykonuje tę logikę

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Co się stanie, jeśli wartość parametru proxy_cache_valid (12h) jest wyższa niż określona nieaktywna wartość (1h) w ścieżce proxy_cache_path?

Dopóki żądanie i dostęp do określonej pamięci podręcznej, ten obiekt pamięci podręcznej będzie nadal ważny do 12 godzin po umieszczeniu obiektu w pamięci podręcznej. Następnie pamięć podręczna została uznana za niepoprawną, więc nginx pobierze z backendu i zresetuje prawidłowy timer. Ale jeśli obiekt był nieaktywny (nie uzyskano dostępu) przez ponad godzinę - nawet w ciągu 12 godzin ważnego okresu buforowania - nginx usunie go z powodu inactiveparametru.

masegaloeh
źródło
„Następnie pamięć podręczna została uznana za niepoprawną, więc nginx pobierze z backendu i zresetuje prawidłowy zegar”. - to interesujące. Czyli nginx pobiera żądanie, nawet jeśli żaden użytkownik go nie pobiera? Na przykład, jeśli nieaktywny jest 365di jest prawidłowy, to 1dnginx będzie pobierał żądania w pamięci podręcznej każdego dnia przez rok, nawet jeśli nikt nie zgłosi takiego żądania?
Martin Thoma,
1
Dobra odpowiedź, ale nie mogę znaleźć żadnej dokumentacji dotyczącej jednostek miar, których używamy z niektórymi z tych parametrów. Na przykład parametry inactiveprzyjmują wartości czasu, ale nie widzę, jakich wartości mogę użyć poza h(jak około 1 miesiąc? 1 dzień? Itd.). I co powinniśmy sprecyzować max_size? Bajty? Czy mogę użyć 1M na 1 megabajt?
Sunil D.
4
@SunilD. - proszę bardzo: nginx.org/en/docs/syntax.html
adamczi