
Gibt es eine Möglichkeit, Varnish so zu konfigurieren, dass alles bis zu einem von mir festgelegten Datum unter einem bestimmten Pfad gespeichert wird?
Meine Site wird einmal im Monat aktualisiert, daher möchte ich bis dahin einfach zwischengespeicherte Inhalte bereitstellen.
Antwort1
Fügen Sie einfach das Header-Feld hinzu
Expires: Thu, 01 Dec 1994 16:00:00 GMT
auf jede Antwort. Und natürlich das Datum auf das Monatsende setzen. Varnish sollte dieses Header-Feld berücksichtigen. Und achten Sie darauf, alle Cache-Control-Header zu entfernen, die das Caching deaktivieren könnten (max-age, no-cache usw.).
Antwort2
Unter Varnish 7.4 verwende ich dies, damit der gesamte zwischengespeicherte Inhalt morgen um Mitternacht abläuft (der Einfachheit halber GMT):
set beresp.ttl = (std.time(regsub(now, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")) + 1d - now);
Was es macht:
now
bei Verwendung als STRING wird es in einen Text wie „Di, 20. Feb. 2018 09:30:31 GMT“ umgewandelt (Dokumente)regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")
ersetzt den Zeitanteil durch 00:00:00, also ist heute Mitternachtstd.time(<#2>)
konvertiert die Zeit vom Typ STRING in den Typ TIME, so dass sie in der Zeitarithmetik verwendet werden kann<#3> + 1d - now
macht aus heute Mitternacht morgen Mitternacht und berechnet die verbleibenden Sekunden dazu, wodurch man einen Wert erhält fürberesp.ttl
Ich teste es noch, aber ich erhalte tatsächlich ein Alter von 3872 für eine Seite, die ich ursprünglich ein paar Stunden vor Mitternacht angefordert habe, also bin ich zuversichtlich.
Antwort3
Legen Sie einen TTL = 30 Tage fest und Varnish stellt 30 Tage lang genau dasselbe Objekt bereit.