清漆缓存 - 缓存403响应

时间:2015-05-15 13:41:28

标签: caching varnish varnish-vcl

我们在AWS S3铲斗前使用清漆,因为我们的命中率达到了98.4%,这使得我们从非常大的S3账单中获益,所以事情一直运行良好!

我们的应用程序现在需要能够请求可能存在或可能不存在的文件。当发生这种情况时,Varnish将向S3发出请求并收到403(许可被拒绝)响应。我们在vcl_error函数中捕获了该响应,因为它允许我们显示自定义错误消息。由于我们预计每秒会发出400-500个请求,其中大约40%是不存在的文件,但我们会遇到S3的成本问题。

我的问题是,是否有可能让Varnish记住该文件返回403并返回缓存的响应?我希望Varnish在从后端请求文件之前等待5分钟。我们正在运行Varnish 3。

我已经阅读过看似sugest的文档,我可以使用"设置obj.ttl = 5m;"在vcl_error函数中,但这似乎不起作用。

谢谢! 艾伦

1 个答案:

答案 0 :(得分:3)

是的,你可以缓存它。只需检查S3的响应状态代码并设置ttl。

清漆3:

sub vcl_fetch {
    if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
    {
        set beresp.ttl = 3s;
    }
}

清漆4:

sub vcl_backend_response {
    if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
    {
        set beresp.ttl = 3s;
    }
}