Grundlegendes zur Anweisung nginx proxy_cache_path

30

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 bedeutet das keys_zone=myCache:8mbedeuten? In den Dokumenten wird nicht viel dazu gesagt:

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

  • Was ist, wenn proxy_cache_valid( 12h) höher ist als der angegebene inactiveWert ( 1h) in proxy_cache_path? Welche Regel wird es folgen? z.B

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

Vielen Dank!

Jürgen Paul
quelle

Antworten:

39

Was bedeutet "keys_zone = myCache: 8m"?

Wie bereits in der Dokumentation erwähnt , speichert nginx alle aktiven Schlüssel und Dateninformationen in einer gemeinsam genutzten Speicherzone, deren nameund sizedurch den Parameter keys_zone konfiguriert werden. Lassen Sie uns der Vollständigkeit halber nach Teilen aufschlüsseln

  • /var/cache/nginxist der Ort, an dem der eigentliche Cache gespeichert ist. Innerhalb des Ordners war die Cache-Datei eine Binärdatei, aber Sie können das HTML-Tag darin leicht erkennen.
  • levels=1:2 Der Parameter is levels legt die Anzahl der Unterverzeichnisebenen im Cache fest.
  • keys_zone=myCache:8mdefinierte die Shared Memory Zone myCache mit einer maximalen Größe von 8 MB. Es enthält alle aktiven Schlüssel und Metadaten des Caches. Wenn nginx also prüft, ob eine Seite zwischengespeichert wurde, durchsucht es zuerst die Shared-Memory-Zone und sucht dann nach dem Ort des tatsächlichen Caches, in dem sich der Cache befindet, /var/cache/nginxfalls vorhanden.
  • max_sizewar die maximale Größe des Caches, zB die Dateigröße /var/cache/nginx.
  • inactive=1hAngabe der maximalen inaktiven Zeit, in der der Cache gespeichert werden kann. Zwischengespeicherte Daten, auf die während der vom inactiveParameter angegebenen Zeit nicht zugegriffen wird, werden unabhängig von ihrer Aktualität aus dem Cache entfernt.

So funktioniert die Überprüfung und Löschung des Caches

Entnommen aus Nginx-Mailinglisten

  • Die Direktive proxy_cache_valid gibt an, wie lange eine Antwort als gültig betrachtet wird (und ohne Anforderungen an das Backend zurückgegeben wird). Nach dieser Zeit gilt die Antwort als "veraltet" und wird entweder nicht zurückgegeben oder hängt von der proxy_cache_use_stale- Einstellung ab.

  • Argument inaktiv von proxy_cache_path gibt an, wie lange Antwort wird im Cache nach dem letzten Gebrauch gespeichert werden. Beachten Sie, dass selbst veraltete Antworten als kürzlich verwendet betrachtet werden, wenn sie angefordert werden.

Soweit ich weiß, 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 einem anderen Prozess 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 Anforderung ausgeführt wurde und auf den jeweiligen Cache zugegriffen wurde, ist dieses Cache-Objekt noch bis 12 Stunden nach dem Einfügen des Objekts in den Cache gültig. Danach galt der Cache als ungültig, sodass Nginx vom Backend abruft und den gültigen Timer zurücksetzt. Wenn das Objekt jedoch länger als eine Stunde inaktiv war (auf das nicht zugegriffen wurde) - selbst in der 12-Stunden-Gültigkeitsperiode -, löscht nginx es aufgrund von inactiveParametern.

masegaloeh
quelle
"Danach galt der Cache als ungültig, so dass Nginx vom Backend abruft und den gültigen Timer zurücksetzt." - das ist interessant. Also holt Nginx die Anfrage, auch wenn kein Benutzer sie holt? Wenn also beispielsweise inaktiv ist 365dund gültig ist, 1druft nginx die Anforderungen ein Jahr lang jeden Tag im Cache ab, auch wenn diese Anforderung von niemandem gestellt wird.
Martin Thoma
1
Gute Antwort, aber ich kann anscheinend keine Dokumentation zu den Maßeinheiten finden, die wir für einige dieser Parameter verwenden. Zum Beispiel nimmt der inactiveParameter Zeitwerte an, aber ich sehe nicht, welche Werte ich außer h(wie wäre es mit 1 Monat oder 1 Tag usw.) verwenden kann. Und womit sollen wir spezifizieren max_size? Bytes? Kann ich 1M für 1 Megabyte verwenden?
Sunil D.
4
@SunilD. - hier gehts: nginx.org/en/docs/syntax.html
adamczi