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

因此,如果没有 VARNISH_USE_CACHE,我希望 req.http.tempCookie 为空,而是始终包含来自 req.http.Cookie 的所有 cookie。

4

1 回答 1

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, "^[; ]+|[; ]+$", "");
于 2013-07-10T15:05:19.923 回答