如何设置清漆缓存控制标头

时间:2012-01-25 20:43:18

标签: http-headers cache-control varnish varnish-vcl

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

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

3 个答案:

答案 0 :(得分:14)

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

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

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

在你的vcl文件中执行:

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

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

答案 1 :(得分:3)

Varnish根据文档忽略了Cache-Control:nocache。以下证据确认:

http://drupal.org/node/1418908

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

答案 2 :(得分:0)

[ivy]有很好的建议,而且当你试图服从最终用户(浏览器)缓存的服务器时,它会有点复杂。我发现this resource有助于理解将Varnish配置为保留缓存的方式比浏览器指示的更长...

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