Nginx: Cache nur aktualisieren, wenn sich die Datei geändert hat – möglich?

Nginx: Cache nur aktualisieren, wenn sich die Datei geändert hat – möglich?

Ich verwende nginx als Reverse-Proxy und zum Caching. Derzeit wird der Cache für den Standort „/test“ alle 2 Stunden erneuert: „proxy_cache_valid 200 302 301 304 2h;“

Ist es möglich, den Cache nur zu erneuern, wenn sich eine Datei geändert hat?

Danke schön!

Antwort1

Dies sollte allgemein für Sie gehandhabt werden.

Wenn eine Datei in einem Browser zwischengespeichert ist und der Browser diese Datei erneut anfordert und die Datei aus dem Server-Cache gelöscht wurde, betrachtet der Server weiterhin den if-modified-sinceHeader in der Anforderung.

Der Server überprüft diesen Datums-/Uhrzeitwert und sendet, wenn er feststellt, dass keine Änderung aufgetreten ist, eine 304Antwort an den Browser, die dem zwischengespeicherten Objekt mitteilt, dass es in Ordnung ist, die zwischengespeicherte Version zu laden, und das eigentliche Objekt nicht erneut heruntergeladen wird.

Wenn sich der Wert ändert, wird der Objektserver und die Cache-Kopie aktualisiert.

https://www.keycdn.com/support/if-modified-since-http-header

Meiner Meinung nach sollten Sie das Caching wirklich über Cache-ControlHeader und nicht über die Serverkonfiguration steuern.

Die Serverkonfigurationsoptionen dienen als Ausfallsicherung für den Fall, dass Cache-Control nicht vorhanden oder unlogisch konfiguriert ist.

Antwort2

Ich gehe davon aus, dass wir über generierte Inhalte sprechen, die nicht bereits als statische Datei auf Ihrem Webserver vorliegen (statische Dateien auf Ihrem Webserver sind normalerweise schnell genug).

Die Hauptfrage ist, wie Sie Nginx mitteilen, dass zwischengespeicherte Inhalte geändert wurden.

Eine erneute Validierung klingt zwar gut, hat aber zur Folge, dass die Überprüfung auf Updates meist genauso aufwändig ist wie die Generierung der Updates. Das ist also keine echte Option.

Die beste Vorgehensweise besteht darin, Inhalte zu löschen, wenn sie aktualisiert wurden (z. B. in Ihrem CMS geändert wurden). Beim Löschen werden zwischengespeicherte Objekte ungültig gemacht. Nginx unterstützt das Löschen nur in der NginxPlus-Version. Sie können jedoch fast dasselbe tun, indem Sie das zwischengespeicherte Objekt neu laden.

Hier ist eine einfache Anleitung:

Nginx-Konfiguration

...

# default location
location / {
    try_files                   $uri @php;
}

# PHP handler
location @php {
    try_files                   $uri /index.php;

    access_log                  /var/log/nginx/access.log;

    # include fastcgi_params
    include                     fastcgi_params;

    # how to connect to PHP-FPM
    fastcgi_pass                php-fpm;

    # enable caching
    fastcgi_cache               phpfpm;

    # don't look for existing cache objects with HTTP header X-Purge
    fastcgi_cache_bypass        $http_x_purge;
}

...

Curl zum Bereinigen eines Dokuments

curl https://example.com/site1/overview.jpeg -s -H "X-Purge: true"

verwandte Informationen