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

Modified on: Sat, 17 Aug 2019 17:00:03 +0800

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

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转换为持续时间,以便我可以动态设置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模块有一个应该做你正在寻找的功能。

在VCL顶部的

import std;,然后这应该有效:

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

..如果没有设置标题,1h是你的默认值。

作者:Shane Madden

相关问答

添加新评论