【问题标题】:Forcing ttl's in varnish 6.2在清漆 6.2 中强制使用 ttl
【发布时间】:2019-06-03 10:31:10
【问题描述】:

我一直在查看最新版本的 Varnish (6.2),但在从 vcl_hit 中删除 return(miss) 时遇到了问题。

所以我们的用例是我们想要将内容缓存一段时间,然后强制清漆检索新内容,在以前的版本中,以下工作正常

sub vcl_hit {

        if (obj.ttl >= 0s) {
            return (deliver);
        }
        else
        {
            return (miss);
        }
    }

但是在 6.2 中,return(miss) 已被移除,我们希望强制内容始终正确刷新。

我查看了 return(pass) 但从文档中这表明响应不会被缓存,这不是我们想要的。

并且 return(fetch) 已经有一段时间没有选择了,但我正在努力寻找替代方案?由于文档中建议的 return(restart) 只会循环回到同一个地方。

我应该寻找其他地方,并尝试禁用优雅/圣人吗?

【问题讨论】:

    标签: varnish-vcl


    【解决方案1】:

    vcl_hit 是错误的子程序,原因有很多,主要原因是您使用一种复杂的方式,有副作用,做一些微不足道的事情。做吧:

    sub vcl_backend_response {
        # set the ttl
        set beresp.ttl = 5m;
        # after ttl is gone, grace kicks in during which
        # content is revalidated asynchronously
        set beresp.grace = 2h;
        # after grace, keep kicks during which
        # content is revalidated synchronously
        set beresp.keep = 3d;
    }
    

    你的sn-p相当于设置grace并保持为0s

    【讨论】:

    • 我想你错过了我的要求,我想要宽限期并保持为 0,以便内容在过期时及时刷新。
    • 所以只需设置 grace 并保持为 0,它会按照您的要求执行,无需触摸 vcl_hit。除非您希望 varnish 在 TTL 结束时自动触发提取,这是不可能的(从来没有),我们需要一个客户端请求。
    猜你喜欢
    • 1970-01-01
    • 2016-11-23
    • 2022-09-26
    • 2023-04-11
    • 2015-08-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多