确定添加 3 个新 cookie 后是否需要更改 Varnish 配置

确定添加 3 个新 cookie 后是否需要更改 Varnish 配置
# Keep all these cookie
if (req.http.Cookie) {
  set req.http.Cookie = ";" + req.http.Cookie;
  set req.http.Cookie = regsuball(req.http.Cookie, "; +", ";");
  set req.http.Cookie = regsuball(req.http.Cookie, ";(location|usertype|viewed-products)=", "; \1=");
  set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
  set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");

  if (req.http.Cookie == "") {
    unset req.http.Cookie;
  }
}

我有这个 varnish 配置,并且添加了 3 个新 cookie,我需要更改什么吗?据我所知,即使我添加了 3 个新 cookie,用于确定您将从 varnish 接收哪些缓存值的 cookie 也完全由您在配置中保存的 cookie 决定,因此它们将由位置、用户类型和查看的产品决定。由于我们只有 2 个位置、3 个用户类型和 3 个产品,因此我们不能有超过 3 个32 18 种不同的缓存值。我说得对吗?

答案1

您是对的,添加缓存不需要的新 cookie 不会影响您的 VCL 配置。

Varnishlog 输出

如有疑问,请使用varnishlog。您可以使用以下命令来监视 cookie 行为:

varnishlog -g request -i ReqUrl -I ReqUnset:Cookie -I ReqHeader:Cookie

此命令将仅显示请求的 URL 以及设置和取消设置 cookie 值的各个日志行。

想象一下向您的 Varnish 服务器发送以下 HTTP 请求:

curl -H "Cookie: foo=bar; location=test" http://localhost

该请求向 Varnish 发送了 2 个 cookie:

  • foo应该删除的未知cookie
  • location应该保留的cookie

以下是日志输出:

*   << Request  >> 132325
-   ReqURL         /
-   ReqHeader      Cookie: foo=bar; location=test
-   ReqUnset       Cookie: foo=bar; location=test
-   ReqHeader      Cookie: ;foo=bar; location=test
-   ReqUnset       Cookie: ;foo=bar; location=test
-   ReqHeader      Cookie: ;foo=bar;location=test
-   ReqUnset       Cookie: ;foo=bar;location=test
-   ReqHeader      Cookie: ;foo=bar; location=test
-   ReqUnset       Cookie: ;foo=bar; location=test
-   ReqHeader      Cookie: ; location=test
-   ReqUnset       Cookie: ; location=test
-   ReqHeader      Cookie: location=test

正如您所看到的,foocookie 被很好地剥离了,但locationcookie 被保留了下来。

控制缓存变化

我看到您正在尝试控制缓存变化的数量,这是有道理的。

问题在于恶意请求可能会产生不必要的缓存变化。

如果每个 cookie 的值数量非常有限,我建议将它们包含在缓存变体逻辑中。

您是否在逻辑中使用 cookie 值来vcl_hash实现这一点?或者您是否Vary: Cookie为此使用了 cookie 值?

相关内容