调试Varnish';s hit_for_pass对象


Debugging Varnish's hit_for_pass objects

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

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

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

对此有什么想法,或者有没有办法确切地了解我为什么如此频繁地得到hit_for_passmiss

谢谢Jake

编辑

再谷歌一下,我发现了这个

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

所以我想这会从响应对象中删除cookie,有人能解释为什么现在这样做了吗?我做了什么让它工作?

EDIT2

再看一眼varnishstat,就会发现它并没有像我预期的那样工作,而且我仍然有很多失误。

如果您得到了很多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值。

我还建议您阅读这篇关于"Accept-Encoding"标头的文章(示例中的代码位于vcl_recv方法中)。

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

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

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