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

Kev*_*son 8 cache-control varnish http-headers varnish-vcl

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

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

ivy*_*ivy 14

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

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

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

在你的vcl文件中执行:

sub vcl_fetch {
  remove beresp.http.Cache-Control;
  set beresp.http.Cache-Control = "public";
}
Run Code Online (Sandbox Code Playgroud)

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

  • 从Varnish 4.0开始,``vcl_fetch`被替换为`vcl_backend_response` (4认同)
  • 从 Varnish 6.5 开始,“remove”被替换为“unset” (4认同)