Varnish可以生成ETag吗?

时间:2014-05-13 07:58:05

标签: caching varnish etag

有没有办法让Varnish为收到的后端响应生成ETag并将其添加到响应中?我更愿意在Varnish中使用所有ETag逻辑,而不是单独为所有后端节点配置它。

我正在使用Varnish 4.0.0。

2 个答案:

答案 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中棘手的部分之一,很容易弄错。