【问题标题】:Debugging Varnish's hit_for_pass objects调试 Varnish 的 hit_for_pass 对象
【发布时间】:2012-08-01 16:54:24
【问题描述】:

我是 Varnish 的新手,我很难理解为什么这么多请求是 misshit_for_pass

我在vcl_recv 中添加了unset req.http.Cookie; 以(如果我是对的)有效地忽略所有cookie 并缓存而不考虑cookie?是这样吗?

但尽管如此,我仍然没有得到hits。所以这种 cookie 方法要么是错误的,要么是完全不同的原因导致它不起作用。

对此有任何想法,或者有没有办法确切了解我为什么经常收到hit_for_passmiss

谢谢 杰克

编辑

再用谷歌搜索,我发现了这个

sub vcl_fetch {
    unset beresp.http.set-cookie; 
}

所以我猜这会从响应对象中删除 cookie,有人可以解释为什么现在可以正常工作以及我为使其正常工作做了什么?

EDIT2

再次查看varnishstat 表明这并没有像我预期的那样工作,而且我仍然有很多失误。

【问题讨论】:

    标签: php caching varnish


    【解决方案1】:

    很有可能,如果您得到很多hit_for_pass 决策,那么您在缓存本身中的信息也很少,因此会出现未命中的情况。

    hit_for_pass 仅从vcl_fetch 方法抛出,我相信,所以值得看看你的服务器返回什么。需要考虑的事项包括:

    • remove beresp.http.Cache-Control;remove beresp.http.Pragma; 阻止您的后端应用程序阻止缓存。

    • remove beresp.http.Expires; 避免现在/过去的到期日期(您可能希望将其更改为远期到期,具体取决于您所服务的内容)。

    • 如果您的应用不提供 cookie,那么remove beresp.http.Set-Cookie; 将对您的 hit_for_pass 率产生重大影响。

    • 确保您设置了适当的beresp.ttl 值。

    我还建议您阅读this article about the 'Accept-Encoding' header(示例中的代码位于vcl_recv 方法中)。

    【讨论】:

    • 谢谢丹。这有帮助,我现在很受欢迎。我真的很想了解为什么这会奏效。删除 Cache-ControlPragma 是有道理的,因为 Varnish 现在正在做缓存,后端的缓存头应该被忽略。过期,这是 Varnish 使用的吗,例如如果是过去,这会影响 Varnish 还是下周 Varnish 会忽略它的 ttl 设置并改用 Expires 标头?最后删除 Set Cookie 是有道理的,我的 /admin 部分只需要 ifs
    • 一个新的“终于”在这里使用了 Cache-Control (varnish-cache.org/docs/3.0/tutorial/…),我是否应该使用我的后端来设置 Cache-Control 标头,可能在 .htaccess 文件中并依赖这些让 Varnish 使用而不是编写新的复杂 VCL?
    【解决方案2】:

    对于可能遇到此问题的其他人,这很有用。

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

    设置标题以显示缓存的内容和未缓存的内容以及原因。

    【讨论】:

      猜你喜欢
      • 2012-12-01
      • 2015-11-28
      • 1970-01-01
      • 2012-09-16
      • 2021-12-30
      • 1970-01-01
      • 2018-11-13
      • 2012-05-24
      • 2021-11-15
      相关资源
      最近更新 更多