我想要在我的 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。