我们在AWS S3存储桶前使用 Varnish ,并且运行情况非常好,因为我们的命中率达到98.4%,这使我们免于超大型S3账单!
我们的应用程序现在需要能够请求可能不存在的文件。发生这种情况时,Varnish将向S3发出请求,并收到403(拒绝权限)响应。我们在vcl_error函数中捕获了该响应,因为它允许我们显示自定义错误消息。由于我们期望每秒处理400-500个请求,其中约40%用于不存在的文件,因此S3会导致成本问题。
我的问题是,是否可以让Varnish记住该文件返回了403并返回了缓存的响应?我希望Varnish等待5分钟,然后再从后端请求文件。我们正在运行Varnish 3。
我已经看过似乎很含蓄的文档,可以使用“set obj.ttl = 5m;”。在vcl_error函数中,但这似乎不起作用。
谢谢!
艾伦
最佳答案
是的,您可以缓存它。只需检查来自S3的响应状态码并设置ttl。
Varnish 3:
sub vcl_fetch {
if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
{
set beresp.ttl = 3s;
}
}
Varnish 4:
sub vcl_backend_response {
if (beresp.status == 403 || beresp.status == 404 || beresp.status >= 500)
{
set beresp.ttl = 3s;
}
}
关于caching - Varnish 缓存-缓存403响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261005/