W tym artykule omówimy mikrokasowanie: po co jest potrzebne, jak je skonfigurować i jakie pułapki mogą się pojawić na drodze.
Co to jest mikrokasowanie?
Mikrokasowanie — to rodzaj pamięci podręcznej, która całkowicie tworzy pliki stron i pozwala na wydawanie już gotowej strony zamiast wysyłania zapytania do serwera backendowego.
Główną wadą takiego kasowania jest oczywiście to, że strony aktualizowane są bardzo rzadko. Ale jakie są zatem zalety takiego kasowania?
Weźmy sytuację z słabym serwerem i dość szybkim serwisem, ale otrzymującym dużą liczbę zapytań od botów. Będą one obciążać zarówno backend, jak i bazę danych, co doprowadzi do spadku wydajności strony, a ona będzie ładować się wolniej. Tutaj z pomocą przychodzi mikrokasowanie: po prostu wydajemy już gotowe strony, nie obciążając ani backendu, ani serwera bazy danych. Mikrokasowanie pozwala również na ładowanie stron znacznie szybciej, ponieważ nie trzeba czekać na odpowiedź od backendu przy każdym zapytaniu.
Taka pamięć podręczna nie nadaje się do dynamicznych stron i stron panelu administracyjnego, ale jeśli masz stronę, którą aktualizujesz na przykład raz dziennie, to jest to doskonała opcja.
Teraz możemy przejść do konfiguracji mikrokasowania.
Konfiguracja mikrokasowania
Do tego potrzebujemy katalogu, w którym będzie przechowywana nasza pamięć podręczna.
W tym artykule użyjemy części RAM jako miejsca na dysku, ponieważ jest to bardziej efektywne niż przechowywanie takich plików na dysku.
Najpierw utworzymy katalog, w którym będzie przechowywana nasza pamięć podręczna, w naszym przypadku /home/cache
:
mkdir /home/cache
Zamontujemy 1 GB RAM jako miejsce na pliki za pomocą polecenia:
mount -t tmpfs -o size=1G tmpfs /home/cache
I dodamy montowanie tej przestrzeni przy każdym uruchomieniu serwera (należy dodać ten wiersz do pliku /etc/fstab
):
tmpfs /home/cache tmpfs rw,size=1G 0 0
Również ustawiamy bezpieczne uprawnienia dla katalogu:
chown www-data:www-data -R /home/cache
chmod 700 /home/cache
Gotowe, przygotowaliśmy miejsce na pamięć podręczną. Plusem tego rozwiązania jest to, że przy ponownym uruchomieniu serwera cała pamięć podręczna jest czyszczona.
Teraz zajmiemy się potencjalnymi pułapkami, które mogą przeszkodzić w pracy z pamięcią podręczną, przez co nie będzie ona działać, nawet jeśli pliki pamięci podręcznej będą tworzone. Pierwsze, co należy zrobić — skonfigurować w PHP parametr session.cache_limiter
na public
, w przeciwnym razie w nagłówku strony będzie wskazane Pragma: no-cache
, co uniemożliwi nam poprawne korzystanie i tworzenie pamięci podręcznej.
Drugą pułapką — należy dodać wiersz do pliku .htaccess
twojej strony. Zalecam ustawienie max-age
tak samo, jak w pozostałej pamięci podręcznej, aby pamięć podręczna nie przestarzała:
Header set Cache-Control "max-age=300, public"
Teraz możemy być pewni, że prawie nic nie przeszkodzi nam w korzystaniu z pamięci podręcznej. Najważniejsze zostawiłem na koniec, a mianowicie konfigurację Nginx.
W pliku /etc/nginx/nginx.conf
należy dodać następujące wiersze do sekcji http
:
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
proxy_cache_valid any 5m;
proxy_cache_valid 200 5m;
proxy_cache_valid 404 15s;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
proxy_cache_lock on;
W pliku konfiguracyjnym samej strony w bloku location /
należy dodać następujące wiersze:
location / {
proxy_cache global_cache;
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_key $host$request_uri;
proxy_ignore_headers "Set-Cookie";
proxy_pass http://backend;
}
Dla ISPManager te wiersze należy dodać do bloku location @fallback
, ponieważ wszystkie zapytania do backendu przechodzą przez ten blok.
A teraz wyjaśnię, za co odpowiada każdy wiersz, który dodaliśmy do konfiguracji:
proxy_cache_path /home/cache levels=1:2 keys_zone=global_cache:100m max_size=1g inactive=5m;
- proxy_cache_path — ścieżka, w której będzie przechowywana pamięć podręczna.
- levels=1:2 — można używać nie więcej niż 3 zagnieżdżeń (na przykład 1:2:3). Cyfry odpowiadają za liczbę znaków w nazwach katalogów pamięci podręcznej, co jest potrzebne do szybkiej pracy na wolnych dyskach. Jeśli użyjesz tylko
levels=1
, na wolnych dyskach z pamięci podręcznej będzie mało pożytku, ponieważ powstanie wiele plików. Zalecam użycie gotowej konfiguracji. - keys_zone=global_cache:100m — nazwa strefy, do której będą się odnosić nasze strony. Jeśli pamięć podręczna jest skonfigurowana na strefę
global_cache
, będzie szukać plików właśnie w katalogu/home/cache
.100m
— rozmiar strefy nazw dla pamięci podręcznej. - max_size=1g — całkowity rozmiar pamięci podręcznej.
- inactive=5m — czas, przez który pamięć podręczna jest uważana za aktywną. Jeśli do pamięci podręcznej nie są wysyłane zapytania przez ten czas, system uznaje ją za nieaktywną i może ją usunąć.
proxy_cache_valid any 5m;
— czas, przez który pamięć podręczna będzie przechowywana.any
oznacza, że wszystkie kody HTTP, z wyjątkiem wyraźnie wskazanych, będą przechowywane przez 5 minut.proxy_cache_use_stale error timeout invalid_header updating http_500 http_503;
— pozwala na użycie przestarzałej pamięci podręcznej w przypadku błędów wskazanych w wierszu.proxy_cache_lock on;
— nie pozwala na tworzenie identycznych pamięci podręcznych z kilku zapytań jednocześnie.proxy_cache global_cache;
— wskazuje, którą strefę pamięci podręcznej będzie używać strona.proxy_cache_key $host$request_uri;
— sprawdzenie statusu pamięci podręcznej. Jeśli w nagłówku będzieX-Cache-Status: HIT
, to wszystko jest poprawnie skonfigurowane. JeśliMISS
, należy szukać przyczyn.proxy_ignore_headers "Set-Cookie";
— pozwala na tworzenie zapytania, ignorując ciasteczka. Bez tego pamięć podręczna nie pokażeHIT
, ponieważ każde zapytanie będzie unikalne.proxy_pass http://backend;
— tutaj należy podać IP i port serwera backendowego (na przykładlocalhost:8080
, jeśli używa się Apache2 jako serwera backendowego).
Status pamięci podręcznej można sprawdzić poleceniem:
curl -I http://Twój_serwis
W odpowiedzi będzie nagłówek X-Cache-Status: HIT
(lub MISS
, BYPASS
). Wszystko, co nie jest HIT
, — to błąd.
Gotowe. Skonfigurowaliśmy mikrokasowanie na stronie.
*Strona articlesite.com została stworzona specjalnie na potrzeby artykułu.
Zachęcamy również do zapoznania się z innymi przydatnymi artykułami: