我最近把一个网站从普通的PHP切换到了wordpress驱动。 清漆的前端是相同的规则,以适应wp-admin。
我发现caching命中对我的连接是独一无二的,对于我和朋友查看相同的网站,但不同的机器,命中数明显增加。
我试着改变vcl_hash并简化
sub vcl_hash { set req.hash += req.url; set req.hash += req.http.host; }
尽pipe如此,caching服务对我们来说都是独一无二的。 意思是说,如果我看到“10”的命中数,我朋友的下一个命中应该理想的是“11”; 但他得到“1”作为命中计数,并增加到“2”等,如果他不断刷新页面
我希望有人能帮助我确定这是为什么发生。 这似乎也发生在其他wordpress网站上。 由于从基于php的驱动转换到Wordpress,我注意到了这一点
如果您的后端服务器是Apache + WordPress,并且您使用的是mod_deflate,那么请检查其Vary标头。
如果Vary头部中显示“用户代理”或“cookie”,则Varnish将按用户代理进行caching。 你可以在Apache中设置不同的值(编辑:或varnish中的vcl_fetch,尽pipe我还没有尝试过)。 我在虚拟主机configuration中使用了setEnv成功。
setEnv force-no-vary
但是,我注意到这个设置将HTTP版本更改为HTTP / 1.0。 但是,我没有使用Keep-Alive等function,所以没有太大关系。 我认为,最终,远程客户端获得HTTP / 1.1之间的清漆(纠正我,如果我错了)。
如果你正在设置cookie,那么你可能想要以不同的方式处理它。
评论你的散列函数(如果你不需要它),然后再试一次。 散列是什么使这个请求唯一的命中。
您必须记住,如果您不执行return
操作,varnish的默认VCL会附加到您的自定义VCL。
所以在你的情况下(由于语法,我认为你使用的是Varnish 2.x),你可能不会清理请求cookies,而默认的VCL会对它们进行哈希处理。 (最好检查一下你的完整的VCLconfiguration和default.vcl应用)
你可以尝试一些事情。
添加一个返回操作
sub vcl_hash { set req.hash += req.url; set req.hash += req.http.host; return (hash); }
有条件的哈希
sub vcl_hash { if ( ! req.url ~ "wp-admin") { set req.hash += req.url; set req.hash += req.http.host; return (hash); } }
消毒cookies
sub vcl_recv { # ... # Before reurning a lookup if ( ! req.url ~ "wp-admin") { unset req.http.Cookie; } # ... }