
有沒有一種方法可以配置 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 天內為完全相同的物件提供服務。