Varnish

添加 3 個新 cookie 後確定是否需要更改清漆配置

  • January 18, 2022
# 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;
 }
}

我有這個清漆配置,我添加了 3 個新的 cookie,所以我需要改變什麼嗎?據我了解,即使我添加了 3 個新 cookie,用於確定您將從 varnish 接收哪些記憶體值的唯一 cookie 僅由您保留在配置中的那些確定,因此它們將由位置確定、使用者類型和查看的產品。由於我們只有 2 個位置、3 個使用者類型和 3 個產品,因此我們不能有超過 3 3 2 18 個不同的記憶體值。我對麼?

沒錯,添加記憶體不需要的新 cookie 不會影響您的 VCL 配置。

清漆日誌輸出

如有疑問,請使用varnishlog. 這是一個可用於監控 cookie 行為的命令:

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

此命令將僅顯示請求的 URL 以及設置和取消設置 cookie 值的各種日誌行。

想像一下將以下 HTTP 請求發送到您的 Varnish 伺服器:

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 的值數量有限,我建議將它們包含在您的記憶體變體邏輯中。

您是否為此使用vcl_hash邏輯中的 cookie 值?或者你用Vary: Cookie它嗎?

引用自:https://serverfault.com/questions/1090282