Varnish能够生成ETags吗?

3

有没有办法让Varnish为其接收到的后端响应生成ETag并将其添加到响应中?我希望所有ETag逻辑都在Varnish中处理,而不是为所有后端节点单独配置。

我正在使用Varnish 4.0.0。

2个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接