Ich habe kürzlich erfahren, dass Nginx die Reverse-Proxy-Funktion um Caching erweitert hat. Ich sah mich um, konnte aber nicht viele Informationen darüber finden.
Ich möchte Nginx als Caching-Reverse-Proxy vor Apache / Django einrichten: Nginx-Proxy-Anforderungen für einige (aber nicht alle) dynamische Seiten an Apache senden, die generierten Seiten zwischenspeichern und nachfolgende Anforderungen für diese Seiten aus dem Cache bereitstellen.
Idealerweise möchte ich den Cache auf zwei Arten ungültig machen:
- Legen Sie ein Ablaufdatum für das zwischengespeicherte Element fest
- So machen Sie das zwischengespeicherte Element explizit ungültig Wenn mein Django-Backend beispielsweise bestimmte Daten aktualisiert hat, möchte ich Nginx anweisen, den Cache der betroffenen Seiten ungültig zu machen
Ist es möglich, Nginx so einzustellen? Wie?
proxy
nginx
reverse-proxy
varnish
Fortsetzung
quelle
quelle
Antworten:
Ich glaube nicht, dass es eine Möglichkeit gibt, zwischengespeicherte Elemente explizit ungültig zu machen, aber hier ist ein Beispiel dafür, wie der Rest erledigt wird. Update: Wie von Piotr in einer anderen Antwort erwähnt, gibt es ein Cache-Bereinigungsmodul , das Sie verwenden können. Sie können auch eine Aktualisierung eines zwischengespeicherten Elements erzwingen, indem Sie proxy_cache_bypass von nginx verwenden. Weitere Informationen finden Sie unter Cherians Antwort .
In dieser Konfiguration werden nicht zwischengespeicherte Elemente von example.net abgerufen und gespeichert. Die zwischengespeicherten Versionen werden zukünftigen Clients bereitgestellt, bis sie nicht mehr gültig sind (60 Minuten).
Ihre Cache-Control- und Expires-HTTP-Header werden berücksichtigt. Wenn Sie also explizit ein Ablaufdatum festlegen möchten, können Sie dies tun, indem Sie die richtigen Header in den von Ihnen verwendeten Proxys festlegen.
Es gibt viele Parameter, die Sie einstellen können. Weitere Informationen hierzu finden Sie in der Dokumentation zum nginx-Proxy-Modul, einschließlich Einzelheiten zur Bedeutung der verschiedenen Einstellungen / Parameter: http://nginx.org/r/proxy_cache_path
quelle
inactive=600m
:? Ist es nichtinactive
an der Zeit zu sein? `[inactive=time]
Sie können zwischengespeicherte Seiten durch spezifisch ungültig machen
Angenommen, Sie möchten eine Seite zwischenspeichern, stellen Sie den Cache auf diese Weise ein
Nun, wenn Sie diese Seite ungültig machen und erneut zwischenspeichern möchten
Führen Sie mit dem Header einen geheimen Curl-Anruf durch
Es wird ungültig und zwischenspeichern.
Funktioniert ab Nginx 0.7.
Als zusätzlichen Bonus
add_header X-Cache-Status
können Sie überprüfen, ob die Seite aus dem Cache stammt oder nicht.quelle
Ich schlage vor, Sie versuchen es mit Varnish . Lack ist speziell als Reverse-Proxy-Cache konzipiert. Es werden alle Cachesteuerungsheader berücksichtigt, die Sie vom Ursprungsserver senden, wodurch Ihre erste Anforderung erfüllt wird.
Für Ihre zweite Anfrage explizite Ungültigerklärung. Ich empfehle dringend, den Namen der URL der Ressource zu ändern, die Sie für ungültig erklären möchten, indem Sie die Datei umbenennen oder eine Art Cache-Buster für Abfragezeichenfolgen verwenden. Varnish verfügt zwar über eine
PURGE
Operation, mit der die Ressource aus dem Cache von Varnish entfernt wird, Sie haben jedoch keine Kontrolle über andere Caches zwischen Ihnen und dem Benutzer. Wie Sie bereits gesagt haben, dass Sie eine Ressource explizit löschen möchten, helfen Ihnen die standardmäßigen HTTP-Steuerelement-Header nicht weiter. In diesen Fällen ist es am einfachsten, die Zwischenspeicherung einer Ressource zu umgehen, wenn Sie sie umbenennen.quelle
style.v123.css
weil einige Caches keine Anforderungen mit einer Abfragezeichenfolge zwischenspeichern.Zum Ungültigmachen ausgewählter Seiten können Sie den Patch "cache_purge" für nginx-0.8.x verwenden, der genau das tut, was Sie wollen;)
Es ist hier erhältlich .
quelle
Die meisten Caching-Tools (Citrix) ermöglichen eine erzwungene Aktualisierung (Strg + R), um eine zwischengespeicherte Seite neu aufzufüllen.
Hier ist ein Trick, den ich gefunden habe, um etwas Ähnliches in Nginx zu tun.
Dies setzt voraus, dass der Cache-Control-Header bei der Ausführung von Strg + R in Ihrem Browser den Wert max-age = 0 in seiner Anforderung hat. Ich weiß, dass Chrome dies tut, aber ich habe es nicht in anderen Browsern versucht. Das Hinzufügen weiterer Header-Felder kann einfach sein, indem Sie einfach weitere if-Anweisungen hinzufügen, mit denen die
$eac
Variable auf 1 gesetzt wird.quelle
Caching ist eine ziemlich neue Funktion in Nginx (und vorerst nicht so gut dokumentiert), aber stabil genug, um in der Produktion verwendet zu werden.
Verwenden Sie englische Dokumentation
Fragen Sie in Mailinglisten
Übersetzen Sie die russische Dokumentation mit etwas wie Google Translate
Verwenden Sie Lack
quelle
Ich glaube, NginxHttpProxyModule kann http-Anfragen verarbeiten. Suchen Sie nach den Anweisungen, die beginnen mit:
Ja, es ist möglich, das Cache-Verhalten über Anweisungen wie die folgenden zu steuern:
quelle
Aufgrund der Tatsache, dass Sie keine Dokumente darauf finden können, wäre ich ein wenig besorgt, wenn ich mich in der Produktion darauf verlassen würde. Haben Sie an Lack gedacht? Es ist meine "Nginx von Reverse-Proxies", klein, leicht, macht einen Job und macht es gut.
quelle
Wenn Sie in Ihrer Anwendung eTags verwenden und nginx voranstellen, wird der Ablauf für Sie erledigt, da der Cache ungültig wird, wenn sich das eTag ändert.
quelle
Sie können den Cache-Ablauf von Nginx mit mehreren Anweisungen / Parametern steuern:
proxy_cache_valid 200 302 10m;
Expires
Cache-Control
X-Accel-Expires
der
inactive
Parameter in derproxy_cache_path
Direktive:proxy_cache_path /data/nginx/cache keys_zone=one:10m inactive=60m;
Ich empfehle meinen Blog-Beitrag, wenn Sie mehr über Nginx-Caching erfahren möchten.
Das Thema Bereinigung ist wirklich interessant, da diese Funktion nur in Nginx Plus (Nginxs Commercial Edition) vorhanden ist. Ich mag @ Randy-Wallace Antwort. Es gibt aber auch andere Möglichkeiten wie das Modul ngx_cache_purge .
Am einfachsten können Sie die zwischengespeicherte Datei manuell entfernen:
Generieren Sie Ihren Hash-Schlüssel:
entferne die Datei aus dem Dateisystem:
quelle
Für zukünftige Besucher: In der Zwischenzeit ist der Nginx Reverse Proxy Caching integriert und die Dokumente sind verfügbar unter:
quelle
Dadurch wird ein Cache für / img / location erstellt. Es befindet sich in / opt / nginx-cache. Objekte werden 1 Minute zwischengespeichert.
Sie können anstelle von jedem andere Antwortcodes schreiben.
Jetzt können Sie den Cache für ausgewählte Seiten nicht mehr ungültig machen. Vielleicht wird es in 0.8.x möglich sein.
quelle
Es gibt ein Nginx- Plugin namens Ncache, das behauptet, "ein Web-Cache-System auf der Basis von Nginx-Webservern zu sein. Schneller und effizienter als Squid."
quelle