2013-07-10 45 views
0

我想在我的vcl_recv的规则来检查,如果某个cookie的存在,如果是这样总是提供缓存的文件(让我们称之为这个cookie VARNISH_USE_CACHE)也光油总是缓存目前

然而,我有一条规则在此之后运行以检查会话cookie(如果它总是存在传递给apache的话),如果VARNISH_USE_CACHE不存在,该规则仍然应该运行。

我不太清楚如何检查一个cookie,然后检查另一个。我试着把cookies分配给一个临时变量,并在那里检查。但我不能理解vcl是如何工作的,因为当我这样做时,我最终得到的cookie完全没有被删除。

下面是vcl_rec我的代码:

set req.http.tempCookie = ";" + req.http.Cookie; 
set req.http.tempCookie = regsuball(req.http.tempCookie, ";(VARNISH_USE_CACHE)=", "; \1="); 
set req.http.tempCookie = regsuball(req.http.tempCookie, ";[^ ][^;]*", ""); 
set req.http.tempCookie = regsuball(req.http.tempCookie, "^[; ]+|[; ]+$", ""); 

所以我期待req.http.tempCookie是空的,如果没有VARNISH_USE_CACHE,相反,它总是有全部来自req.http.Cookie饼干。

回答

0

啊算出来:

忘记了此行

set req.http.tempCookie = regsuball(req.http.tempCookie, "; +", ";"); 

因此,代码看起来像:

set req.http.tempCookie = ";" + req.http.Cookie; 
set req.http.tempCookie = regsuball(req.http.tempCookie, "; +", ";"); 
set req.http.tempCookie = regsuball(req.http.tempCookie, ";(VARNISH_USE_CACHE)=", "; \1="); 
set req.http.tempCookie = regsuball(req.http.tempCookie, ";[^ ][^;]*", ""); 
set req.http.tempCookie = regsuball(req.http.tempCookie, "^[; ]+|[; ]+$", "");