清漆是缓存网页时,我去我的网站匿名。
我打开了“匿名用户缓存页”,所以这是预期的。
但是,当我登录时,它继续加载我在注销时访问的页面的缓存页面,所以用户特定的菜单永远不会显示,登录按钮也会继续显示,即使我已经登录了。
我认为Varnish不适用于登录用户,我使用的是默认的drupal缓存系统,而我认为它不适用于登录用户?我怎么才能阻止这一切?
LEMP Stack - Ubuntu Server 12.04
APC + Memcached
清漆
为匿名用户启用->缓存页
最小缓存寿命-> 0
缓存页的过期( -> 6小时)
清漆缓存清除: Drupal默认值
我使用本指南和这个Varnish文件安装了Varnish:http://andrewdunkle.com/how-install-varnish-drupal-7
我在Firefox中禁用了浏览器缓存,并且我的主页上仍然有刷新缓存点击,但是现在菜单加载正确。这意味着什么?
发布于 2013-11-06 14:23:32
你有两个选择:
中的缓存
为了防止浏览器存储和重用页面,您必须确保Cache-Control:no-cache, must-revalidate, post-check=0, pre-check=0位于相应的(HTML)页面上。
您可以在sub vcl_deliver中强制这个标头。只需确保没有将该头放在静态资产上(如图像、CSS和JavaScript文件):
sub vcl_deliver {
set req.http.Cache-Control = "no-cache, must-revalidate, post-check=0, pre-check=0";
}上
如果希望强制浏览器在cookies更改(即打开会话)时使其缓存失效,则必须确保响应上有Vary: Cookie头。
sub vcl_deliver {
if (resp.http.Vary !~ "Cookie") {
set resp.http.Vary = resp.http.Vary + ", Cookie";
set resp.http.Vary = regsub(resp.http.Vary, "^,\s*", "");
}
}同样,如果您限制这个片段--根据用户是否登录而具有不同内容的页/文件类型--则缓存更有效。
Safari (至少v5是Windows的最后一个,以及iPad 1和一些旧的iPhones上的一个)有一个令人讨厌的错误。我建议添加以下代码片段,以禁用Safari浏览器缓存:
sub vcl_deliver {
if (resp.http.X-Generator ~ "Drupal" && req.http.user-agent ~ "Safari" && req.http.user-agent !~ "Chrome") {
set resp.http.Cache-Control = "no-cache, must-revalidate, post-check=0, pre-check=0";
}
}注意:这与bug报告的注释中提出的解决方案略有不同。通过将片段放入vcl_deliver而不是vcl_fetch,我们避免了分离回收箱。还请注意,通过在X-Generator ~ "Drupal"上进行匹配,我们避免了禁用静态资产的浏览器缓存。
今天(2013年11月),我在Safari5.1.1 (Windows)、6.1 (MacOSX10.8/ Mountain )和7.0 (iOS 7)上复制了这种不当行为。
发布于 2013-11-06 15:07:46
我选择使用第二种选择。我将代码片段添加到我的“消失”配置文件中:
/etc/varnish/default.vcl
我添加它是因为它是自己的独立片段,而不是将if函数放在已经存在的sub vcl_deliver中。
https://drupal.stackexchange.com/questions/91353
复制相似问题