如何忽略清漆中的大饼干

How to ignore big cookies in varnish

我想忽略 cookie 大小较大的请求。由于 "BogoHeader Header too long: Cookie: xyz",我们在 Varnish 中删除了一些请求。如何在 VCL 中完成?我没有在VCL中找到任何len、length或strlen函数,我知道它可以在vcl_rcev阶段完成。

strlen() 功能无法解决您的问题。由于 Cookie header before vcl_recv 被执行,varnish 丢弃了请求。如果您不希望这些请求被丢弃,您需要检查并调整一些运行时参数:http_req_hdr_lenhttp_req_sizehttp_resp_hdr_len

无论如何,如果您仍然对 strlen() 功能感兴趣,将它添加到 std VMOD 中将是微不足道的,但目前不存在该支持。您可以考虑使用现有的 VMOD,包括像 strlen() 这样的实用程序(或自己实现),但这可能工作量太大。最后,您可以考虑使用仅使用 VCL 和正则表达式的 hacky 方法:

if (req.http.Cookie ~ "^.{1024,}$") {
    ...
}