我希望在我的vcl_recv中有一个规则来检查某个cookie是否存在,如果存在,则始终提供一个缓存文件(让我们称这个cookie为VARNISH_USE_CACHE)。
但是,我还有一个在此之后运行的规则,用于检查会话cookie (如果它存在,则始终传递给apache),如果VARNISH_USE_CACHE不存在,此规则仍应运行。
我不太确定如何检查一个cookie,然后再检查另一个。我尝试将cookie分配给一个temp变量,并在那里进行检查。但我一定不理解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, "^[; ]+|[; ]+$", "");
因此,如果没有VARNISH_USE_CACHE,我期望req.http.tempCookie为空,相反,它始终拥有来自req.http.Cookie的所有cookie。
发布于 2013-07-10 15:05:20
啊,算出来了:
忘记了这一行
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, "^[; ]+|[; ]+$", "");
https://stackoverflow.com/questions/17573773
复制相似问题