Frage Die nginx-Anweisung proxy_cache_path verstehen


Angenommen, ich habe diese nginx-Konfigurationsdatei

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=myCache:8m max_size=100m inactive=1h;
  • Was macht das? keys_zone=myCache:8m bedeuten? In den Dokumenten wird nicht viel gesagt:

Darüber hinaus werden alle aktiven Schlüssel und Informationen über Daten in einer gemeinsam genutzten Speicherzone gespeichert, deren Name und Größe durch den Parameter keys_zone konfiguriert werden.

  • Was, wenn proxy_cache_valid(12h) ist höher als angegeben inactive Wert (1h) im proxy_cache_path? Nach welcher Regel wird es folgen? z.B.

    proxy_cache_valid 200 302 12h;
    proxy_cache_valid 404 302 1h;
    

Vielen Dank!


26
2018-03-21 00:49


Ursprung




Antworten:


Was bedeutet keys_zone = myCache: 8m?

Wie Dokumentation sagte, Nginx wird behalten Alle aktiven Schlüssel und Informationen über Daten werden gespeichert in einer gemeinsam genutzten Speicherzone, deren name und size werden mit dem Parameter keys_zone konfiguriert. Der Vollständigkeit halber lassen wir uns pro Teil aufgliedern

  • /var/cache/nginx ist der Ort, an dem der eigentliche Cache gespeichert wird. Innerhalb des Ordners war die Cache-Datei eine Binärdatei, aber Sie können leicht das HTML-Tag darin erkennen.
  • levels=1:2 is levels parameter legt die Anzahl der Unterverzeichnissebenen im Cache fest.
  • keys_zone=myCache:8m definierte die gemeinsam genutzte Speicherzone namens myCache mit einer maximalen Größe von 8 MB. Es enthält alle aktiven Tasten und Metadaten des Caches. Wenn also nginx prüft, ob eine Seite zwischengespeichert wurde, konsultiert es zuerst die gemeinsam genutzte Speicherzone und sucht dann den Ort des tatsächlichen Cache in /var/cache/nginx wenn Cache vorhanden ist.
  • max_size war maximale Größe des Caches, z.B. Dateigröße auf /var/cache/nginx.
  • inactive=1h Spezifizieren Sie die maximale inaktive Zeit Cache kann gespeichert werden. Zwischengespeicherte Daten, auf die während der von inactive Parameter werden unabhängig von ihrer Frische aus dem Cache entfernt.

Wie funktioniert die Überprüfung und Löschung von Caches?

Genommen von Nginx-Mailinglisten

  • Richtlinie proxy_cache_valid Gibt an, wie lange die Antwort als gültig angesehen wird (und ohne Rückfragen an das Backend zurückgegeben wird). Nach dieser Zeit wird die Antwort als "abgestanden" und Entweder wird nicht zurückgegeben oder wird abhängig sein proxy_cache_use_stale Rahmen.

  • Streit inaktiv von proxy_cache_pfad Gibt an, wie lange die Antwort nach der letzten Verwendung im Cache gespeichert wird. Beachten Sie, dass selbst veraltete Antworten als kürzlich verwendet betrachtet werden, wenn Anfragen an sie gesendet werden.

Wie ich es verstehe, hier der Pseudocode, wie nginx funktioniert

Wenn die Anfrage kommt

if cache.exist AND (now() - cache.first_retrieved) < proxy_cache_valid:
    use it
else:
    retrieve from backend
    replace the old ones

In anderen Prozessen führt der Cache-Manager diese Logik aus

if (now() - cache.last_used) > inactive:
    del cache

if all-cache.size > max-size:
    del *the most inactive cache* until size < max-size

Was ist, wenn proxy_cache_valid (12h) höher als der angegebene inaktive Wert (1h) in proxy_cache_path ist?

Solange die Anfrage und der Zugriff auf den bestimmten Cache erfolgt, wird dieses Cache-Objekt noch bis 12 Stunden nach dem Einlagern des Objekts im Cache gültig sein. Danach wurde der Cache als ungültig betrachtet, so dass nginx vom Backend abruft und den gültigen Timer zurücksetzt. Aber wenn Objekt mehr als eine Stunde inaktiv war (nicht zugegriffen) - selbst in 12h gültig - Cache-Periode - wird nginx Lösche es durch inactive Parameter.


31
2017-11-03 10:10



"Danach wurde der Cache als ungültig angesehen, also wird nginx vom Backend abholen und den gültigen Timer zurücksetzen." - das ist interessant. Also holt nginx die Anfrage, auch wenn kein Benutzer sie abruft? Also zum Beispiel, wenn inaktiv ist 365dund gültig ist 1d Dann wird nginx die Anfragen jeden Tag für ein Jahr im Cache abholen, auch wenn niemand diese Anfrage stellt? - Martin Thoma
Schöne Antwort, aber ich kann keine Dokumentation über die Maßeinheiten finden, die wir mit einigen dieser Parameter verwenden. Zum Beispiel, die inactive Params braucht Zeitwerte, aber ich sehe nicht, welche Werte ich verwenden kann h (wie ungefähr 1 Monat? oder 1 Tag? usw.). Und womit sollten wir spezifizieren? max_size? Bytes? Kann ich 1M für 1 Megabyte verwenden? - Sunil D.