Ostatnio słyszałem, że Nginx dodał buforowanie do swojej funkcji odwrotnego proxy. Rozejrzałem się, ale nie mogłem znaleźć wielu informacji na ten temat.
Chcę skonfigurować Nginx jako buforujące odwrotne proxy przed Apache / Django: aby mieć żądania proxy Nginx dla niektórych (ale nie wszystkich) dynamicznych stron do Apache, a następnie buforować wygenerowane strony i obsługiwać kolejne żądania tych stron z bufora.
Idealnie chciałbym unieważnić pamięć podręczną na 2 sposoby:
- Ustaw datę ważności dla buforowanego elementu
- Aby jawnie unieważnić buforowany element. Np. Jeśli mój backend Django zaktualizował pewne dane, chciałbym powiedzieć Nginx, aby unieważnił pamięć podręczną dotkniętych stron
Czy można tak ustawić Nginx? W jaki sposób?
proxy
nginx
reverse-proxy
varnish
Kontynuacja
źródło
źródło
Odpowiedzi:
Nie sądzę, że istnieje sposób na jawne unieważnienie buforowanych elementów, ale oto przykład, jak zrobić resztę. Aktualizacja: Jak wspomniał Piotr w innej odpowiedzi, istnieje moduł czyszczenia pamięci podręcznej , którego można użyć. Możesz także wymusić odświeżenie buforowanego elementu za pomocą proxy_cache_bypass nginx - więcej informacji znajdziesz w odpowiedzi Cheriana .
W tej konfiguracji elementy, które nie są buforowane, będą pobierane z example.net i przechowywane. Wersje buforowane będą obsługiwane przez przyszłych klientów, dopóki nie będą już ważne (60 minut).
Nagłówki HTTP sterujące pamięcią podręczną i wygasają będą honorowane, więc jeśli chcesz jawnie ustawić datę wygaśnięcia, możesz to zrobić, ustawiając odpowiednie nagłówki w czymkolwiek, co zastępujesz.
Istnieje wiele parametrów, które można dostroić - zobacz dokumentację modułu proxy Nginx, aby uzyskać więcej informacji na ten temat, w tym szczegółowe informacje na temat znaczenia różnych ustawień / parametrów: http://nginx.org/r/proxy_cache_path
źródło
inactive=600m
oznacza? Czy nieinactive
ma być czas? `[inactive=time]
Możesz w szczególności unieważnić buforowane strony
Powiedz, że chcesz buforować stronę, ustaw pamięć podręczną w ten sposób
Teraz, gdy chcesz unieważnić tę stronę i ponownie buforować
Wykonaj tajne połączenie curl z nagłówkiem
Spowoduje to unieważnienie i buforowanie.
Działa z Nginx 0.7.
Jako dodatkowy bonus
add_header X-Cache-Status
można go użyć do sprawdzenia, czy strona pochodzi z pamięci podręcznej, czy nie.źródło
Proponuję wypróbować Varnish . Lakier jest specjalnie zaprojektowany jako pamięć podręczna odwrotnego proxy. Uhonoruje wszystkie nagłówki kontroli pamięci podręcznej wysyłane z serwera źródłowego, co spełnia Twoje pierwsze żądanie.
W przypadku drugiego żądania wyraźne unieważnienie. Moim zdecydowanym zaleceniem jest zmiana nazwy adresu URL zasobu, który chcesz unieważnić, przez zmianę nazwy pliku lub użycie jakiejś formy pomijania pamięci podręcznej ciągu zapytań. Varnish ma
PURGE
operację, która usunie zasób z pamięci podręcznej Varnish, ale nie da ci kontroli nad innymi buforami między tobą a użytkownikiem. Jak powiedziałeś, że chcesz jawnie oczyścić zasób, standardowe nagłówki kontrolne HTTP nie pomogą. W takich przypadkach najbardziej niezawodnym sposobem na pokonanie buforowania zasobu jest zmiana jego nazwy.źródło
style.v123.css
dlatego, że niektóre pamięci podręczne nie będą buforować żądań zawierających ciąg zapytania.Aby unieważnić wybrane strony, możesz użyć łatki „cache_purge” dla nginx-0.8.x, która robi dokładnie to, co chcesz;)
Jest dostępny tutaj .
źródło
Większość narzędzi buforowania (Citrix) umożliwia wymuszone odświeżenie (Ctrl + r), aby ponownie zapełnić buforowaną stronę.
Oto sztuczka, którą znalazłem, aby zrobić coś podobnego w Nginx.
Zakłada się, że kiedy wykonujesz Ctrl + rw przeglądarce, nagłówek Cache-Control ma w żądaniu max-age = 0. Wiem, że Chrome to robi, ale nie próbowałem w innych przeglądarkach. Dodanie większej liczby pól nagłówka może być łatwe, wystarczy dodać więcej instrukcji if, które ustawiają
$eac
zmienną na 1.źródło
Buforowanie to całkiem nowa funkcja w Nginx (i na razie nie jest tak dobrze udokumentowana), ale wystarczająco stabilna, aby mogła być używana w produkcji.
Skorzystaj z dokumentacji w języku angielskim
Zapytaj na listach mailowych
Tłumacz rosyjską dokumentację przy pomocy czegoś takiego jak Tłumacz Google
Użyj lakieru
źródło
Wierzę, że NginxHttpProxyModule jest w stanie obsłużyć żądania HTTP. Poszukaj dyrektyw zaczynających się od:
Tak, możliwe jest kontrolowanie zachowania pamięci podręcznej za pomocą dyrektyw takich jak:
źródło
Biorąc pod uwagę fakt, że nie można znaleźć na nim dokumentów, byłbym trochę ostrożny, jeśli chodzi o poleganie na nim podczas produkcji. Czy rozważałeś Lakier? To mój „nginx odwrotnych serwerów proxy”, mały, lekki, wykonujący jedną pracę i wykonujący ją dobrze.
źródło
Jeśli użyjesz tagów eTag w swojej aplikacji i umieścisz przed nim nginx, wówczas zajmie się ono wygaśnięciem, ponieważ jeśli eTag się zmieni, spowoduje to unieważnienie pamięci podręcznej.
źródło
Możesz kontrolować wygasanie pamięci podręcznej Nginx za pomocą wielu dyrektyw / parametrów:
proxy_cache_valid 200 302 10m;
Expires
Cache-Control
X-Accel-Expires
inactive
parametr wproxy_cache_path
dyrektywie:proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;
Polecam mój post na blogu, jeśli chcesz dowiedzieć się więcej o buforowaniu Nginx.
Temat usuwania jest naprawdę interesujący, ponieważ ta funkcja istnieje tylko w Nginx Plus (edycja komercyjna Nginx). Naprawdę podoba mi się odpowiedź @ randy-wallace. Ale są też inne możliwości, takie jak moduł ngx_cache_purge .
Najprostszą rzeczą, którą możesz zrobić, to ręcznie usunąć plik z pamięci podręcznej:
wygeneruj swój klucz skrótu:
usuń plik z systemu plików:
źródło
Dla przyszłych użytkowników: tymczasem odwrotne proxy nginx ma zintegrowane buforowanie, a dokumenty są dostępne pod adresem:
źródło
To tworzy pamięć podręczną dla / img / location. Jest w / opt / nginx-cache. Obiekty są buforowane przez 1 minutę.
Możesz pisać różne kody odpowiedzi zamiast jakichkolwiek.
Teraz nie możesz unieważnić pamięci podręcznej dla wybranych stron. Może w wersji 0.8.x będzie to możliwe.
źródło
Istnieje wtyczka nginx o nazwie ncache, która twierdzi, że jest „systemem pamięci podręcznej opartym na serwerze internetowym nginx. Szybszym i bardziej wydajnym niż kałamarnica”.
źródło