Varnish: Кэшировать весь контент до определенной даты?

Varnish: Кэшировать весь контент до определенной даты?

Можно ли настроить Varnish так, чтобы он хранил все данные по определенному пути до указанной мной даты?

Мой сайт обновляется раз в месяц, поэтому до этого времени я бы хотел просто предоставлять кэшированный контент.

решение1

Просто добавьте поле заголовка

Expires: Thu, 01 Dec 1994 16:00:00 GMT

на каждый ответ. И, конечно, установите дату на конец месяца. Varnish должен учитывать это поле заголовка. И обязательно удалите все заголовки управления кэшем, которые могут отключить кэширование (max-age, no-cache и т. д.).

решение2

В Varnish 7.4 я использую это, чтобы весь кэшированный контент истекал завтра в полночь (для простоты по Гринвичу):

set beresp.ttl = (std.time(regsub(now, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")) + 1d - now);

Что оно делает:

  1. nowпри использовании в качестве STRING преобразуется в текст типа «Вт, 20 фев 2018 09:30:31 GMT» (документы)
  2. regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")заменяет часть времени на 00:00:00, то есть сегодня полночь
  3. std.time(<#2>)преобразует время из типа STRING в тип TIME, чтобы его можно было использовать в арифметике времени
  4. <#3> + 1d - nowпревращает сегодняшнюю полночь в завтрашнюю полночь и вычисляет оставшиеся до нее секунды, получая значение дляberesp.ttl

Я все еще тестирую его, но на самом деле получаю Age: 3872 для страницы, которую я изначально запросил за пару часов до полуночи, так что я в этом уверен.

решение3

Установите ttl = 30 дней, и Varnish будет обслуживать тот же объект в течение 30 дней.

Связанный контент