清漆caching每个用户或UA的WordPress的网站(我不知道)。 我想caching是普遍的

我最近把一个网站从普通的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; } # ... }