Cache
如何動態設置清漆響應 TTL?
我的 php 腳本正在發送標頭
X_Cache_ttl: 1h
,並且在我的清漆配置文件中sub vcl_fetch { if(beresp.http.X-Cache-ttl){ set beresp.ttl = beresp.http.X-Cache-ttl; } }
但是當我嘗試啟動它時,帶有 set 命令的行導致清漆失敗。
在我得到的日誌中
Expression has type STRING, expected DURATION ('input' Line 116 Pos 34) -- ('input' Line 116 Pos 56) set beresp.ttl = beresp.http.X-Cache-ttl;
如何轉換
X-Cache-ttl
為持續時間以便動態設置 TTL?我想避免多個 if 語句類似於
if(beresp.http.X-Cache-ttl == "60s") { set beresp.ttl = 60s; } if(beresp.http.X-Cache-ttl == "1h") { set beresp.ttl = 1h; }
如果重要的話,我在 centos 6 上使用 varnish 3.0.3。
該
vmod_std
模組有一個功能應該可以滿足您的需求。
import std;
在 VCL 的頂部,那麼這應該可以工作:sub vcl_fetch { set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h); }
..
1h
如果未設置標題,這是您的預設設置。
根據 Varnish 文件,您可以使用
Cache-Control
標題。記憶體控制
“Cache-Control”標頭指示記憶體如何處理內容。Varnish 關心 max-age 參數並使用它來計算對象的 TTL。
因此,請確保發出帶有 max-age 標頭的“Cache-Control”標頭。你可以看看 Varnish Software 的 Drupal 伺服器有哪些問題:
$ GET -Used http://www.varnish-software.com/|grep ^Cache-Control Cache-Control: public, max-age=600