有没有办法让Varnish为收到的后端响应生成ETag并将其添加到响应中?我更愿意在Varnish中使用所有ETag逻辑,而不是单独为所有后端节点配置它。
我正在使用Varnish 4.0.0。
答案 0 :(得分:1)
Etags目前尚未在Varnish中实施(see the wiki)。
答案 1 :(得分:0)
如果愿意,您可以在VCL中创建etag标题及其值。
sub vcl_backend_response {
if (!beresp.http.Etag) {
set beresp.http.Etag = "W/foo";
}
}
这里的主要问题是如何使Etag反映对象的主体。您必须知道您的应用程序如何安全地执行此操作。一种方法是将Date响应头和URL一起提供给libvmod-digest,并将哈希输出设置为Etag。
在Varnish 4.0.0中你有(维基过时)对后端的If-Modified-Since / If-None-Match的支持,所以如果你选择在VCL中这样做,记得在vcl_backend_fetch中过滤它,所以你不要混淆你的后端。
总的来说,我建议不要在VCL中这样做。在后端添加它通常只是启用一个模块。 VCL的实际变化很简单,但这是HTTP中棘手的部分之一,很容易弄错。