【问题标题】:Varnish cache based on header基于标头的清漆缓存
【发布时间】:2013-07-18 14:46:37
【问题描述】:

目前我在运行大约 30-40 个不同网站的服务器上运行 Varnish。所有这些网站都使用相同的库来处理请求(每个网站都有自己的域)。然而,其中一些网站非常简单,可以完全缓存。我想做的是在项目/网站(某些标题)中启用一个标志,告诉清漆在交付后缓存请求。这样的构造是否可行,因为我不想为每个可以完全缓存的项目编辑 VCL 并向 vcl_fetch 添加一个条目,例如:

if (req.http.host ~ "<website>")
{
    unset req.http.cookie;
    return (lookup)
}

有没有合适的方法来做到这一点?我确实看过 Varnish 流程图,但想不出一个好的解决方案。

提前致谢!

【问题讨论】:

    标签: php caching varnish


    【解决方案1】:

    我希望这可以帮助你。在下面的示例中,自定义标头用作条件。

    sub vcl_fetch {
        if (req.http.Custom-Header == "www.site.com" {
           set beresp.ttl = [...]
           [...]
         }
         elsif (req.http.Custom-Header == "www.site2.com" {
           set beresp.ttl = [...] 
          }
          else {
          [...]
          }
          return(deliver);
    }
    

    【讨论】:

      【解决方案2】:

      嗯,我刚开始使用 Varnish 并喜欢这个想法。因为我有一个麻烦,我只想缓存几个域并且不想一直更改 vcl。

      我研究了设置一个“特殊”标题,然后让 varnish 发挥作用。

      但后来我查看了文档,发现有更简单的方法。

      header('Cache-Control: public, max-age=10');
      

      这种方式 varnish 缓存内容 10 秒。因此,如果您想永久缓存它,那么您可以使用一个非常高的整数来接近。

      // Caches the content for a year, if my calculations are right :P
      header('Cache-Control: public, max-age=' . (60 * 60 * 24 * 365));
      

      【讨论】:

        【解决方案3】:

        Varnish 将遵守后端在响应标头中表示的 TTL。 如果您希望站点 X 被缓存,请使用 mod_expires(或类似的)并从后端正确设置 TTL。如果你不希望站点 Y 被缓存,设置 Cache-Control: s-maxage=0 并且 Varnish 不会缓存它。

        如果你必须有一个特定的响应头,这里是一些示例 VCL:

          sub vcl_fetch {
               if (beresp.http.x-do-not-cache) {
                   set beresp.ttl = 0s;
               }
          }
        

        请注意,我没有在这里执行 return()。通过设置 TTL 并通过默认 VCL Varnish 将自行处理。

        【讨论】:

          【解决方案4】:

          Varnish 默认情况下,不更改任何 VCL,读取后端返回的 HTTP 1.1 标准缓存头(Cache-Control、Expires 等)并根据这些头缓存对象。所以只要你在 vcl_recv 中return (lookup);,Varnish 就已经被配置为做你想做的事了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-27
            • 2017-10-20
            • 1970-01-01
            • 2019-01-14
            • 2018-09-21
            • 2014-01-09
            • 2012-04-03
            • 1970-01-01
            相关资源
            最近更新 更多