【发布时间】:2014-05-13 07:58:05
【问题描述】:
有没有办法让 Varnish 为它收到的后端响应生成一个 ETag 并将其添加到响应中?我宁愿在 Varnish 中使用所有 ETag 逻辑,而不是为我的所有后端节点单独配置它。
我正在使用 Varnish 4.0.0。
【问题讨论】:
有没有办法让 Varnish 为它收到的后端响应生成一个 ETag 并将其添加到响应中?我宁愿在 Varnish 中使用所有 ETag 逻辑,而不是为我的所有后端节点单独配置它。
我正在使用 Varnish 4.0.0。
【问题讨论】:
Etags 目前没有在 Varnish 中实现 (see the wiki)。
【讨论】:
您可以根据需要在 VCL 中创建 etag 标头及其值。
sub vcl_backend_response {
if (!beresp.http.Etag) {
set beresp.http.Etag = "W/foo";
}
}
这里的主要问题是如何使 Etag 反映对象的主体。您必须知道您的应用程序如何安全地执行此操作。一种方法是将日期响应标头与 URL 一起提供给 libvmod-digest,并将散列输出设置为 Etag。
在 Varnish 4.0.0 中,您(wiki 已过时)支持 If-Modified-Since/If-None-Match 到后端,因此如果您选择在 VCL 中执行此操作,请记住在 vcl_backend_fetch 中对其进行过滤,以便您不要混淆你的后端。
一般来说,我建议不要在 VCL 中这样做。在后端添加它通常只是启用一个模块。 VCL 中的实际更改很简单,但这是 HTTP 的棘手部分之一,很容易出错。
【讨论】: