有没有什么方法可以配置 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);
它能做什么:
now
当用作 STRING 时,将转换为类似“Tue, 20 Feb 2018 09:30:31 GMT”的文本(文档)regsub(<#1>, "^(.+?)\d{2}:\d{2}:\d{2}(.+?)$", "\100:00:00\2")
将时间部分替换为 00:00:00,即今天午夜std.time(<#2>)
将时间从 STRING 转换为 TIME 类型,以便可以用于时间运算<#3> + 1d - now
将今天的午夜变成明天的午夜,并计算剩余的秒数,得到一个值beresp.ttl
仍在测试它,但实际上我在午夜前几个小时最初请求的页面上得到了年龄:3872,所以我对此很肯定。
答案3
设置 ttl = 30 天,Varnish 将在 30 天内提供完全相同的对象。