我的PHP脚本发送头X_Cache_ttl: 1h并在我的清漆configuration文件
sub vcl_fetch { if(beresp.http.X-Cache-ttl){ set beresp.ttl = beresp.http.X-Cache-ttl; } }
但是当我尝试启动它时,set命令行会导致varnish失败。
在我得到的日志
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转换为一个持续时间,以便我可以dynamic设置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上使用清漆3.0.3。
vmod_std模块有一个function,应该做你正在寻找。
import std; 在VCL的顶部,那么这应该工作:
sub vcl_fetch { set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h); }
..其中1h是您的默认,如果头没有设置。