Varnish:缓存所有内容直到某个日期?

Varnish:缓存所有内容直到某个日期?

有没有什么方法可以配置 Varnish 将所有内容存储在某个路径下,直到我设置的日期?

我的网站每月更新一次,因此在此之前我只想提供缓存内容。

答案1

只需添加标题字段

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

到每个响应。当然,将日期设置为月底。Varnish 应该遵守此标头字段。并确保删除所有可能禁用缓存的缓存控制标头(max-age、no-cache 等)。

答案2

在 Varnish 7.4 上,我使用这个来让所有缓存内容在明天午夜过期(为方便起见,使用 GMT 时间):

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

它能做什么:

  1. now当用作 STRING 时,将转换为类似“Tue, 20 Feb 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

仍在测试它,但实际上我在午夜前几个小时最初请求的页面上得到了年龄:3872,所以我对此很肯定。

答案3

设置 ttl = 30 天,Varnish 将在 30 天内提供完全相同的对象。

相关内容