2013-07-10 41 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, "^[; ]+|[; ]+$", "");