我认为在我的网站上开始使用Varnish。 我刚刚尝试了清漆,我想知道如何caching页面,即使我的网站使用Cookie,谷歌分析。 我试图删除它们,但它似乎不清漆。 这是我的configuration看起来像; http://pastie.org/1254664 。 如果有关系,我有一台Debian服务器和一台使用Ubuntu服务器的服务器。 那么,即使我使用cookies,我如何caching网站?
先谢谢你!
另外:我没有得到任何X-Cache:HIT / MISS。 我究竟做错了什么?
对于使用Varnish进行caching,我相当新,但是到目前为止,这是我学到的东西:使用Varnish对应用程序进行caching时需要考虑几个因素。
在你的情况下,知道什么是设置和什么目的。 如果清漆看到您的请求的cookie,您将被传递到后端,导致caching未命中。
Google Analytics Cookie
如果您使用的是Google Analytics(分析)Cookie,则可以安全地将其置于清漆中; 不用担心,您的遗传algorithm报告中的数据仍然存在。 在你的vcl_recv
使用这样的东西
set req.http.Cookie = regsuball(req.http.Cookie, "(^|;\s*)(__[az]+|__utma_a2a)=[^;]*", "");
你也可以在vcl_recv
尝试更多的清理行
去掉 ”;” 来自Cookies的前缀
set req.http.Cookie = regsub(req.http.Cookie, "^;\s*", "");
取消设置空的Cookie
if (req.http.Cookie ~ "^\s*$") { unset req.http.Cookie; }
应用程序特定的Cookie
如果您的应用程序在用户login时设置了一个cookie来执行一个function,那么这些请求不应该被caching并直接发送到后端。 否则,您可以caching通过login用户查看的页面(错误)。
使用这样的东西:
if (req.http.Authorization || req.http.Cookie) { return (pass); }
HTH,祝你好运。
编辑
用这个来看清楚什么是清漆曲奇:
varnishtop -i RxHeader -I Cookie
如果你是正义错过任何,赶上他们在这里!
我不了解清漆。 但是根据我在服务器pipe理方面的经验,先尝试一下局域网中的东西,而不是移动到互联网上。
这就是http中的Vary-header所用的变体:应该返回相同资源的变体。 清漆理解Vary: cookies
。
如果你没有得到X-Cache头文件,你根本就不能连接到caching; 你确定它运行在正确的IP /端口?
您可能会将您网站的某些部分传递给后端,而无需caching。
vcl_recv和vcl_fetch块最简单的例子:
sub vcl_recv { if (req.url ~ "^/somescript.php") { return (pass); } else { unset req.http.Cookie; } return(lookup); } sub vcl_fetch { if (req.url ~ "^/somescript.php") { return (pass); } else { unset req.http.Cookie; } return(deliver); }
阅读 – 阅读这个了解为什么清漆错过
运行varnishlog ,看看你是否真的要通过清漆
我的build议是检查您确实需要cookies的url(例如pipe理面板),并删除所有其他url的cookie。 看下面的例子:
sub vcl_recv { if (req.url ~ "^/admin/") { # administration panel set req.http.admin = 1; } else { # public web site, ignore client request for fresh content, remove cookies unset req.http.Cache-Control; unset req.http.Max-Age; unset req.http.Pragma; unset req.http.Cookie; } ... } sub vcl_fetch { if (req.http.admin == 1) { # administration panel return (hit_for_pass); } else { # public web site, not allowed to set cookies unset beresp.http.Set-Cookie; ... } ... }