http-headers - 如何设置 Varnish 缓存控制 header

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

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

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

最佳答案

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

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

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

    在您的 vcl 文件中执行以下操作:
    sub vcl_fetch {
      remove beresp.http.Cache-Control;
      set beresp.http.Cache-Control = "public";
    }
    

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

    关于http-headers - 如何设置 Varnish 缓存控制 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9009966/

    相关文章:

    Symfony2、Varnish 和 ESI 导致奇怪的行为

    angularjs - Ionic - $http.get() 不发送授权 header

    ruby-on-rails-3 - 如何在 Rails 3 中生成 Assets ID 来控制缓存?

    javascript - 将缓存控制设置为外部资源?

    浏览器缓存控制、动态内容

    php - 配置 Varnish 后如何将网页缓存 2 分钟。 (Ubuntu 14.04,Apache,PHP)

    php - 如何在 Wordpress 中下载导出的 csv 文件

    ruby-on-rails - 如何在 Rails 4 Controller 中为 "allow-from" "X-Frame-Options"多个域?

    java - 'filename' 中的 UTF-8 字符对于 'Content-Disposition' 产生 "IllegalArgumentException: Unexpected char"

    caching - 当 Varnish 缓存已满时会发生什么?