如何dynamic设置清漆响应TTL?

我的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是您的默认,如果头没有设置。