如何动态设置清漆响应 TTL?

Div*_*com 9 cache varnish ttl

我的 php 脚本正在发送一个标头X_Cache_ttl: 1h,在我的清漆配置文件中我有

sub vcl_fetch
{
    if(beresp.http.X-Cache-ttl){
            set beresp.ttl = beresp.http.X-Cache-ttl;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试启动它时,带有 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;
Run Code Online (Sandbox Code Playgroud)

如何转换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;
}
Run Code Online (Sandbox Code Playgroud)

如果重要的话,我在 centos 6 上使用 varnish 3.0.3。

Sha*_*den 11

vmod_std模块有一个功能,应该做你正在寻找的。

import std; 在 VCL 的顶部,那么这应该可以工作:

sub vcl_fetch
{
    set beresp.ttl = std.duration(beresp.http.X-Cache-ttl, 1h);
}
Run Code Online (Sandbox Code Playgroud)

..1h如果未设置标题,则这是您的默认值。