Varnish: Alle Inhalte bis zu einem bestimmten Datum zwischenspeichern?

Varnish: Alle Inhalte bis zu einem bestimmten Datum zwischenspeichern?

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:

  1. nowbei Verwendung als STRING wird es in einen Text wie „Di, 20. Feb. 2018 09:30:31 GMT“ umgewandelt (Dokumente)
  2. regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")ersetzt den Zeitanteil durch 00:00:00, also ist heute Mitternacht
  3. std.time(<#2>)konvertiert die Zeit vom Typ STRING in den Typ TIME, so dass sie in der Zeitarithmetik verwendet werden kann
  4. <#3> + 1d - nowmacht 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.

verwandte Informationen