我们正在缓存一个有问题的 IIS 服务器,该服务器有时只发送空响应(0 字节)而不是正确的响应。缓存这些响应将是一场灾难,我们无法解决问题,因为它不是我们的服务器。相反,如果它们为空(0 字节),我想指示 Varnish 不要缓存来自后端的响应。
阅读 VCL 参考(https://www.varnish-cache.org/docs/4.0/reference/vcl.html)我看不到任何明显的解决方法。
可以做到吗?
我们正在缓存一个有问题的 IIS 服务器,该服务器有时只发送空响应(0 字节)而不是正确的响应。缓存这些响应将是一场灾难,我们无法解决问题,因为它不是我们的服务器。相反,如果它们为空(0 字节),我想指示 Varnish 不要缓存来自后端的响应。
阅读 VCL 参考(https://www.varnish-cache.org/docs/4.0/reference/vcl.html)我看不到任何明显的解决方法。
可以做到吗?
如果您想将其用作整数来查看是否大于或小于值,请使用 std。
import std;
if (std.integer(beresp.http.content-length, 0) < 500) {
#logic here
}
响应的大小应作为 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
}