我是 Varnish 的新手,我很难理解为什么有这么多请求是 miss
或 hit_for_pass
。
我在 unset req.http.Cookie;
中添加了 vcl_recv
以(如果我是对的)有效地忽略所有 cookie 和缓存,而不管 cookie 是什么?这是正确的吗?
但尽管如此,我仍然没有收到 hits
。所以这种 cookie 方法要么是错误的,要么是完全不同的原因导致它不起作用。
关于这个的任何想法,或者有没有办法确切地了解为什么我经常收到 hit_for_pass
或 miss
。
谢谢
jack
编辑
更多的谷歌搜索,我发现了这个
sub vcl_fetch {
unset beresp.http.set-cookie;
}
所以我想这会从响应对象中删除 cookie,有人可以解释为什么现在可以工作以及我做了什么才能让它工作吗?
编辑2
再次查看
varnishstat
表明这并没有像我预期的那样工作,而且我仍然有很多失误。
最佳答案
如果您有很多hit_for_pass
决策,那么很有可能您在缓存本身中的存储量也很少,因此未命中。
我相信hit_for_pass
仅从vcl_fetch
方法抛出,因此值得一看服务器返回的内容。要考虑的事项包括:
remove beresp.http.Cache-Control;
和remove beresp.http.Pragma;
阻止后端应用程序阻止缓存。 remove beresp.http.Expires;
可以避免现在/过去的到期日期(您可能希望将其更改为远期到期,具体取决于您所提供的服务)。 remove beresp.http.Set-Cookie;
将对您的hit_for_pass率产生重大影响。 beresp.ttl
值。 我还建议您阅读this article about the 'Accept-Encoding' header(示例中的代码在
vcl_recv
方法中)。
关于php - 调试Varnish的hit_for_pass对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11740270/