ZALOGUJ
    opened image

    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

    Mikrokasowanie nginx+apache i niuanse konfiguracji - 2

     

    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.

     

    Mikrokasowanie nginx+apache i niuanse konfiguracji - 3

    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"

    Mikrokasowanie nginx+apache i niuanse konfiguracji - 4

     

    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;

    Mikrokasowanie nginx+apache i niuanse konfiguracji - 5

     

    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;
    }

    Mikrokasowanie nginx+apache i niuanse konfiguracji - 6

     

    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ędzie X-Cache-Status: HIT, to wszystko jest poprawnie skonfigurowane. Jeśli MISS, należy szukać przyczyn.

    • proxy_ignore_headers "Set-Cookie"; — pozwala na tworzenie zapytania, ignorując ciasteczka. Bez tego pamięć podręczna nie pokaże HIT, ponieważ każde zapytanie będzie unikalne.

    • proxy_pass http://backend; — tutaj należy podać IP i port serwera backendowego (na przykład localhost: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

    ​​​​​​​Mikrokasowanie nginx+apache i niuanse konfiguracji - 7

     

    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: