Jak buforować zawartość w Nginx

Jak buforować zawartość w Nginx

Nginx Będąc skonsolidowanym open source, wysokowydajny serwer WWW, który przyspiesza dostarczanie treści i aplikacji, poprawia bezpieczeństwo i poprawia skalowalność. Jeden z najczęstszych przypadków użycia Nginx jest Buforowanie treści, co jest najskuteczniejszym sposobem na zwiększenie wydajności strony internetowej.

Przeczytaj także: 10 najlepszych narzędzi buforowania open source dla Linux

Możesz użyć Nginx Aby przyspieszyć lokalne serwery pochodzenia, konfigurując je do reakcji podręcznych z serwerów upstream, a także do tworzenia serwerów krawędzi dla sieci dostarczania treści (CDN). Nginx zasila niektóre z największych CDN.

Po skonfigurowaniu pamięci podręcznej Nginx będzie:

  • Treść statyczna i dynamiczna pamięci podręcznej.
  • Popraw wydajność treści dynamicznej dzięki mikro-wchłonięciu.
  • obsługiwać przestarzałe treści podczas przeszacowania w tle, aby uzyskać lepszą wydajność.
  • zastąp lub ustaw nagłówki sterowania pamięcią podręczną i więcej.

W tym artykule dowiesz się, jak konfigurować Nginx jak Buforowanie treści w Linux, aby Twoje serwery internetowe działały tak wydajnie, jak to możliwe.

Wymagania wstępne:

Powinieneś mieć Nginx Zainstalowany na serwerze Linux, jeśli nie postępuj zgodnie z tymi przewodnikami, aby zainstalować Nginx:

  • Jak zainstalować Nginx na CentOS 8
  • Jak zainstalować Nginx w CentOS 7

Treść statyczna pamięci podręcznej na Nginx

Treść statyczna jest treścią witryny, która pozostaje taka sama (nie zmienia się) na wszystkich stronach. Przykłady treści statycznych obejmują pliki takie jak obrazy, filmy, dokumenty; Pliki CSS i pliki JavaScript.

Jeśli Twoja witryna korzysta z wielu treści statycznych, możesz zoptymalizować jej wydajność, umożliwiając buforowanie po stronie klienta, w którym przeglądarka przechowuje kopie treści statycznej dla szybszego dostępu.

Poniższa przykładowa konfiguracja to dobry, po prostu wymień www.przykład.com z adresem URL nazwy witryny i odpowiednio modyfikacje innych nazw ścieżek.

serwer  # Zastąp adres URL swojego serwera WWW na www.przykład.Com Server_name www.przykład.com; root/var/www/przykład.com/htdocs; indeks indeksu.php; access_log/var/log/nginx/przykład.com.dostęp.dziennik; error_log/var/log/nginx/przykład.com.błąd.dziennik; lokalizacja / try_files $ URI $ URI / / Index.php?$ args;  Lokalizacja ~ .php $ try_files $ uri = 404; Dołącz fastcgi_params; # Zastąp gniazdo lub adres i port, serwer WordPress Fastcgi_pass UNIX:/var/run/php5-fpm.skarpetka; #fastcgi_pass 127.0.0.1: 9000;  Lokalizacja ~* .(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLS | | exe | ppt | tar | mid | midi | Wav | Bmp | rtf) $ expires max; log_not_Found Off; access_log off;  

Treść dynamiczna pamięci podręcznej na Nginx

Nginx używa trwałej pamięci podręcznej na dysku znajdującej się gdzieś w lokalnym systemie plików. Zacznij więc od utworzenia lokalnego katalogu dysków do przechowywania treści buforowanych.
# mkdir -p/var/cache/nginx

Następnie ustaw odpowiednią własność w katalogu pamięci podręcznej. Powinien być własnością Nginx użytkownik (nginx) i grupa (nginx) Jak następuje.

# chown nginx: nginx/var/cache/nginx 

Teraz przejdź dalej, aby zobaczyć, jak włączyć dynamiczną zawartość na Nginx w poniższej sekcji.

Włączanie pamięci podręcznej FastCGI w Nginx

Fastcgi (Lub FCGI) jest szeroko stosowanym protokołem do interfejsów interaktywnych, takich jak Php z serwerami internetowymi, takimi jak Nginx. Jest to przedłużenie CGI (Wspólny interfejs bramy).

Główna zaleta FCGI jest to, że zarządza wieloma żądaniami CGI w jednym procesie. Bez tego WebServer musi otworzyć nowy proces (który musi być kontrolowany, przetworzyć żądanie i zostać zamknięte) dla każdego żądania klienta o usługę.

W procesie Php Skrypty we wdrożeniu stosu LEMP, Nginx zastosowania FPM (FastCGI Process Manager) Lub PHP-FPM, Popularna alternatywna implementacja PHP FastCGI. Kiedyś PHP-FPM Proces działa, Nginx jest skonfigurowany do żądań proxy do przetwarzania. W ten sposób Nginx można również skonfigurować do reakcji pamięci podręcznej z PHP-FPM serwer aplikacji backend.

Pod Nginx, Fastcgi pamięć podręczna treści jest zadeklarowana za pomocą dyrektywy o nazwie fastcgi_cache_path na najwyższym poziomie http kontekst, w strukturze konfiguracji Nginx. Możesz także dodać fastcgi_cache_key który definiuje klucz (identyfikator żądania) do buforowania.

Poza tym, aby odczytać status pamięci podręcznej, dodaj Add_header X-Cache-Status dyrektywa w obrębie http Kontekst - jest to przydatne do celów debugowania.

Zakładając, że plik konfiguracyjny bloku serwera witryny znajduje się pod adresem /etc/nginx/conf.D/TestApp.conf Lub /etc/nginx/witryny-dostępne/testapp.conf (Pod Ubuntu i jego pochodnymi), otwórz plik edycji i dodaj następujące wiersze u góry pliku.

fastcgi_cache_path/var/cache/nginx Poziomy = 1: 2 Keys_Zone = CacheZone: 10m; nieaktywne = 60m max_size = 40m; fastcgi_cache_key "$ scheme $ request_method $ host $ request_URI"; add_header x-cache $ uptream_cache_status; 
Włącz pamięć podręczną FastCGI w Nginx

fastcgi_cache_path dyrektywa określa liczbę parametrów, które są:

  • /var/cache/nginx - ścieżka do lokalnego katalogu dysku dla pamięci podręcznej.
  • poziomy - określa poziomy hierarchii pamięci podręcznej, ustawia hierarchię katalogu dwupoziomowego /var/cache/nginx.
  • Keys_zone (nazwa: rozmiar) - umożliwia tworzenie wspólnej strefy pamięci, w której przechowywane są wszystkie aktywne klucze i informacje o danych (meta). Zauważ, że przechowywanie kluczy w pamięci przyspiesza proces sprawdzania, ułatwiając Nginx ustalenie, czy jest to CHYBIĆ Lub UDERZYĆ, bez sprawdzania statusu na dysku.
  • nieaktywny - Określa czas, po czym buforowane dane, które nie są dostępne w określonym czasie, są usunięte z pamięci podręcznej, niezależnie od ich świeżości. Wartość 60m W naszej przykładowej konfiguracji oznaczają, że pliki niedostępne po 60 -letnich zostaną usunięte z pamięci podręcznej.
  • największy rozmiar - Określa maksymalny rozmiar pamięci podręcznej. Można tu użyć więcej parametrów (przeczytaj dokumentację Nginx, aby uzyskać więcej informacji).

Zmienne w fastcgi_cache_key Dyrektywa opisano poniżej.

Nginx używa ich do obliczania klucza (identyfikatora) żądania. Co ważne, aby wysłać buforowaną odpowiedź na klienta, żądanie musi mieć ten sam klucz jak odpowiedź buforowana.

  • Schemat $ - Schemat żądania, HTTP lub HTTPS.
  • $ request_method - Metoda żądania, zwykle „DOSTAWAĆ" Lub "POST".
  • $ host - Może to być nazwa hosta z wiersza żądania lub nazwy hosta z „Gospodarz”Pole nagłówka żądania lub nazwa serwera pasująca do żądania w kolejności pierwszeństwa.
  • $ request_uri - oznacza pełny oryginalny URI żądania (z argumentami).

Również $ uptream_cache_status zmienna w Add_header X-Cache-Status Dyrektywa jest obliczana dla każdego żądania, na które Nginx odpowiada, czy jest to CHYBIĆ (Odpowiedź nie znaleziono w pamięci podręcznej, dostałem z serwera aplikacji) lub UDERZYĆ (Odpowiedź serwowana z pamięci podręcznej) lub dowolnej innej obsługiwanych wartości.

Następnie w obrębie Lokalizacja dyrektywa, która przekazuje żądania PHP do PHP-FPM, używa fastcgi_cache dyrektywy w celu aktywacji pamięci podręcznej, którą właśnie zdefiniowałeś powyżej.

Ustaw czas buforowania dla różnych odpowiedzi za pomocą fastcgi_cache_valid dyrektywa, jak pokazano.

fastcgi_cache cachezone; fastcgi_cache_valid 60m; 
Zdefiniuj strefę buforowania i czas

Jeśli tylko czas buforowania jest określony jak w naszym przypadku, tylko w naszym przypadku 200, 301, I 302 Odpowiedzi są buforowane. Ale możesz również określić odpowiedzi jawnie lub użyć dowolnego (dla dowolnego kodu odpowiedzi):

fastcgi_cache cachezone; fastcgi_cache_valid 200 301 203 60m; fastcgi_cache_valid 404 10m; Lub fastcgi_cache pamięci podręcznej; fastcgi_cache_valid dowolne 10m; 

Dopracowanie wydajności buforowania FastCGI na Nginx

Aby ustawić minimalną liczbę razy żądanie z tym samym kluczem, zanim odpowiedź zostanie buforowana, uwzględnij fastcgi_cache_min_uses dyrektywa, albo w http Lub serwer Lub Lokalizacja kontekst.

fastcgi_cache_min_uses 3 
Ustaw minimalne użycie pamięci podręcznej

Aby umożliwić ponowne walidację wygasłych elementów pamięci podręcznej przy użyciu żądań warunkowych za pomocą „If-modyfikowany scena" I "If-none-mecz„Pola nagłówka, dodaj fastcgi_cache_revalidate dyrektywa w obrębie http Lub serwer Lub Lokalizacja kontekst.

fastcgi_cache_revalidate ON; 
Ustaw ponowne walidację pamięci podręcznej

Możesz także poinstruować Nginx Aby dostarczyć buforowaną zawartość, gdy serwer Origin lub serwer FCGI jest wyłączony, używając proxy_cache_use_stale dyrektywa, w ramach dyrektywy lokalizacji.

Ta przykładowa konfiguracja oznacza, że ​​kiedy Nginx Otrzymuje błąd, limit czasu i dowolne z określonych błędów z serwera Upstream i ma ustną wersję żądanego pliku w buforowanej zawartości.

Proxy_cache_use_stale Limit czasu błędu HTTP_500; 
Włącz obsługę przestarzałych danych

Kolejną przydatną dyrektywą w celu dostrojenia wydajności buforowania FCGI jest fastcgi_cache_background_update który działa w połączeniu z proxy_cache_use_stale dyrektywa. Po ustawieniu instruuje NGINX, aby obsłużyła przestarzałą zawartość, gdy klienci poprosili o wygaśnięcie pliku lub jest w trakcie aktualizacji z serwera Upstream.

fastcgi_cache_background_update on; 
Włącz aktualizację tła pamięci podręcznej

fastcgi_cache_lock jest również przydatne, aby uzyskać wydajność pamięci podręcznej, ponieważ jeśli wielu klientów poprosi o tę samą treść, której nie ma w pamięci podręcznej, Nginx przekazuje tylko pierwsze żądanie serwera Upstream, pamięć odpowiedź, a następnie podaj inne żądania klienta z Pamięć podręczna.

fastcgi_cache_lock on; 
Włącz blokadę pamięci podręcznej

Po wprowadzeniu wszystkich powyższych zmian w Nginx plik konfiguracyjny, zapisz i zamknij. Następnie sprawdź strukturę konfiguracji dowolnej błędy składniowej przed ponownym uruchomieniem usługi Nginx.

# nginx -t # Systemctl restart nginx 
Sprawdź i uruchom usługę Nginx

Następnie sprawdź, czy pamięć podręczna działa poprawnie, spróbuj uzyskać dostęp do aplikacji internetowej lub witryny z użycia następującego polecenia Curl (po raz pierwszy powinien wskazać CHYBIĆ, ale kolejne żądania powinny wskazywać UDERZYĆ jak pokazano na zrzucie ekranu).

# curl -i http: // testapp.Tecmint.com 
Testuj pamięć podręczną FastCGI

Oto kolejny zrzut ekranu pokazujący Nginx obsługujący zestarzane dane.

Test nginx obsługujący zestarzał się danych

Dodawanie wyjątków do pomostowania pamięci podręcznej

Możliwe jest ustalenie warunków, na podstawie których Nginx nie powinien wysyłać odpowiedzi buforowanych dla klientów, korzystając z fastcgi_cache_Bypass dyrektywa. I instruować Nginx, aby w ogóle nie buforować odpowiedzi z serwera Upstream, użyj fastcgi_no_cache.

Na przykład, jeśli chcesz POST żądania i adresy URL z ciągiem zapytań, aby zawsze przejść do PHP. Najpierw zadeklaruj instrukcję IF, aby ustawić warunek w następujący sposób.

ustaw $ skip_cache 0; if ($ request_method = post) set $ skip_cache 1;  

Następnie aktywuj powyższy wyjątek w Lokalizacja dyrektywa, która przekazuje żądania PHP do PHP-FPM, używając fastcgi_cache_Bypass I fastcgi_no_cache dyrektywy.

 fastcgi_cache_Bypass $ skip_cache; fastcgi_no_cache $ skip_cache; 

Istnieje wiele innych części Twojej witryny, dla których możesz nie chcieć umożliwić buforowania treści. Poniżej znajduje się przykład konfiguracji Nginx do poprawy wydajności witryny WordPress, dostarczonej w nginx.com blog.

Aby go używać, wprowadzaj zmiany (takie jak domena, ścieżki, nazwy plików itp.) Aby odzwierciedlić to, co istnieje w twoim środowisku.

fastcgi_cache_path/var/run/nginx-cache poziomy = 1: 2 Keys_zone = WordPress: 100m inaktywne = 60m; fastcgi_cache_key "$ scheme $ request_method $ host $ request_URI"; przykład Server_name Przykład.com www.przykład.com; root/var/www/przykład.com; indeks indeksu.php; access_log/var/log/nginx/przykład.com.dostęp.dziennik; error_log/var/log/nginx/przykład.com.błąd.dziennik; ustaw $ skip_cache 0; # Żądania postu i adresy URL z ciągiem zapytania powinny zawsze przejść do php if ($ request_method = post) set $ skip_cache 1;  if ($ query_string != "") set $ skip_cache 1;  # Nie buforuj URI zawierające następujące segmenty if ($ request_uri ~* "/wp-admin/|/xmlrpc.PHP | WP-.*.PHP |/FEED/| Indeks.PHP | SITEMAP (_INDEX)?.xml ") set $ skip_cache 1; # nie używaj pamięci podręcznej dla użytkowników logowanych lub najnowszych komentatorów, jeśli ($ http_cookie ~*" komentarz_author | WordPress_ [a-f0-9]+| WP-PostPass | WordPress_No_Cache | WordPress_logged_in ") set $ skip_cache 1; lokalizacja / try_files $ uri $ uri / / index.php?$ args;  Lokalizacja ~ .php $ try_files $ URI /index.php; Dołącz fastcgi_params; fastcgi_pass Unix:/var/run/php5-fpm.skarpetka; fastcgi_cache_Bypass $ skip_cache; fastcgi_no_cache $ skip_cache; fastcgi_cache WordPress; fastcgi_cache_valid 60m;  lokalizacja ~ /czystka ( /.*) fastcgi_cache_purge WordPress "$ scheme $ request_method $ host 1 $";  Lokalizacja ~* ^.+.(OGG | OGV | SVG | SVGZ | EOT | OTF | WOFF | MP4 | TTF | CSS | RSS | ATOM | JS | JPG | JPEG | GIF | PNG | ICO | ZIP | TGZ | GZ | RAR | BZ2 | DOC | XLS | | exe | ppt | tar | mid | midi | Wav | Bmp | rtf) $ Access_Log Off; log_not_Found Off; wygasa max;  lokalizacja = /roboty.txt access_log off; log_not_Found Off;  Lokalizacja ~ /.  zaprzeczać wszystkiemu; access_log off; log_not_Found Off;  

Włączanie pamięci podręcznej proxy w Nginx

Nginx wspiera również buforowanie odpowiedzi innych serwerów serwerów (określonych przez proxy_pass dyrektywa). W tym przypadku testowym używamy Nginx jako odwrotnego proxy dla węzła.Aplikacja internetowa JS, więc włączymy Nginx jako pamięć podręczną dla węzła.Aplikacja JS. Wszystkie używane tutaj dyrektywy konfiguracyjne mają podobne znaczenia jak dyrektywy FASTCGI w poprzedniej sekcji, więc nie wyjaśnimy ich ponownie.

Aby umożliwić buforowanie odpowiedzi z serwera serwera, uwzględnij proxy_cache_path dyrektywa na najwyższym poziomie http kontekst. Aby określić, w jaki sposób żądania są buforowane, możesz również dodać proxy_cache_key dyrektywa w następujący sposób.

proxy_cache_path/var/cache/nginx app1 klawisze_zone = proxyCache: 100m inaktywne = 60m max_size = 500 m; proxy_cache_key "$ scheme $ request_method $ host $ request_uri"; add_header x-cache-status $ uptream_cache_status; proxy_cache_min_uses 3; 

Następnie aktywuj pamięć podręczną w dyrektywie lokalizacji.

lokalizacja/proxy_pass http: // 127.0.0.1: 3000; proxy_cache proxycache; proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m;  

Aby zdefiniować warunki, w których Nginx nie wysyła treści buforowanej i w ogóle nie buforuje odpowiedzi z serwera Upstream, uwzględnij proxy_cache_Bypass I proxy_no_cache.

 proxy_cache_Bypass $ cookie_nocache $ arg_nocache $ arg_comment; proxy_no_cache $ http_pragma $ http_authorization; 

Wydrażanie wydajności pamięci podręcznej proxy

Poniższe dyrektywy są przydatne do dostrajania wydajności pamięci podręcznej proxy. Mają też takie same znaczenie jak dyrektywy FASTCGI.

proxy_cache_min_uses 3; proxy_cache_revalidate on; Proxy_cache_use_stale Limit czasu na błąd aktualizacja HTTP_500; proxy_cache_background_update on; proxy_cache_lock on; 

Aby uzyskać więcej informacji i dyrektywy konfiguracji buforowania, zobacz dokumentację dwóch głównych modułów NGX_HTTP_FASTCGI_MODULE i NGX_HTTP_PROXY_MODULE.

Dodatkowe zasoby: buforowanie treści Nginx i wskazówki dotyczące poprawy wydajności WordPress.