9

我希望有人可以建议让 Varnish 发送缓存控制标头的正确方法。目前,我的配置正在向客户端发送“Cache-Control: no-cache”

提前感谢任何可能提供帮助的人...

4

3 回答 3

15

您的后端正在向 Varnish 发送“Cache-Control: no-cache”,这意味着两件事:

  • Varnish 不会将响应存储在缓存中(因此下一次查找将失败)
  • 您的客户端(浏览器和中间代理)不会缓存响应(并一遍又一遍地请求它们)。

解决方案很简单:在从后端获取响应之后(以及在将它们存储到缓存中之前)删除缓存控制标头。

在您的 vcl 文件中执行以下操作:

sub vcl_fetch {
  remove beresp.http.Cache-Control;
  set beresp.http.Cache-Control = "public";
}

您可以选择仅对某些 url 执行此操作(将其包装在( if req.url ~ "" )逻辑中)并执行更高级的操作。

于 2012-01-26T20:05:53.143 回答
4

Varnish 根据文档忽略 Cache-Control: nocache。这里有证据证实:

http://drupal.org/node/1418908

要获得该结果,您应该检测标头 Cache-Control 。无缓存。从您的后端,然后使缓存无效,将后端响应设置为不可缓存,或在另一个标头中发出 max-age: 0 (我现在忘记了名称)。

于 2012-07-11T02:30:57.617 回答
1

[ivy] 有很好的建议,并且/但是当您尝试服从最终用户(浏览器)缓存的服务器意图时,它会变得有点复杂。我发现这个资源有助于理解一种方法来配置 Varnish 以比浏览器指示的时间更长地保留缓存...

https://www.varnish-cache.org/trac/wiki/VCLExampleLongerCaching

于 2013-06-05T15:32:17.787 回答