是否可以根据Varnish中后端响应的大小来阻止缓存?

时间:2016-03-08 13:12:10

标签: caching varnish varnish-vcl varnish-4

我们正在缓存有问题的IIS服务器,有时只发送空响应(0字节)而不是正确的响应。缓存这些响应将是一场灾难,我们无法解决问题,因为它不是我们的服务器。相反,如果它们是空的(0字节),我想指示Varnish不缓存来自后端的响应。

阅读VCL参考文献(https://www.varnish-cache.org/docs/4.0/reference/vcl.html)我无法找到解决这个问题的明显方法。

可以吗?

2 个答案:

答案 0 :(得分:1)

响应的大小应该作为HTTP标头提供。

示例(在vcl_backend_response中):

if (beresp.http.Content-Length == "0") {
    return(retry);   # Retries the request
}

或:

if (beresp.http.Content-Length == "0") {
    beresp.uncacheable = true;   # Prevents object from being cached
}

答案 1 :(得分:1)

如果你想将它用作整数来查看是否大于或小于value,请使用std。

import std; 

if (std.integer(beresp.http.content-length, 0) < 500) {
  #logic here 
}