好的,所以我现在正在推出一个带有Varnish 4的盒子,我很好奇什么是正常的(尽管如果所有在线示例都表明它只剥离已知的cookie)cookie方法是什么?它是否剥离了所有cookie和白名单已知的cookie?这似乎更明智一点,所以这就是我的好奇心。在查看最底部的https://www.varnish-cache.org/trac/wiki/VCLExampleRemovingSomeCookies之后,他们会展示如何删除除SOME之外的所有内容(白名单),然后直接在标题下说(警告 - 不太漂亮)。
以下是片段:
sub vcl_recv {
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, ";(COOKIE1|COOKIE2)=", "; \1=");
set req.http.Cookie = regsuball(req.http.Cookie, ";[^ ][^;]*", "");
set req.http.Cookie = regsuball(req.http.Cookie, "^[; ]+|[; ]+$", "");
if (req.http.Cookie == "") {
remove req.http.Cookie;
}
}
首先,有人抛出那个(警告 - 不是很漂亮)部分,因为它不是真正的最佳设置,或者是“嘿,这将是一个噩梦,试图接受用户报告”或其他什么?
我对第二件事感到好奇(保证!:P),这将彻底删除COOKIE1 | COOKIE2之外的任何和所有饼干,对吗?
最后我对这个片段感到好奇,其中COOKIE1 | COOKIE2是,(我不太了解正则表达式)这是否意味着我可以用__bilbobaggins替换COOKIE1(真正的cookie名称__bilbobaggins = 1; 134; onewasaring)然后COOKIE2与1_2_3__4_cookiename(真正的cookie名称1_2_3__4_cookiename =这个,是,另一个,cookie)它将允许那些全部通过而不需要正则表达式或实际cookie数据通过的东西?
我很遗憾没想到它就像那样简单?
此外,无论上述方法是什么,我都可以使用Varnish 4 varnishlog语法来监控只有后端的cookie吗?
答案 0 :(得分:1)
关于你的第一个问题,我会说它更多是关于可读性而不是性能。如果您了解代码并且您对此感到满意,我认为没有任何问题。
你的第二个问题的答案是肯定的,它将保留COOKIE1和COOKIE2。您可以使用varnishtest验证。请注意,您需要将“删除”重命名为“未设置”(删除特定于Varnish 3)。
关于最后一个问题,更正,您可以将COOKIE1和COOKIE2替换为真实Cookie的名称。请记住,您需要编码“;”。
对于其他方法,请在https://github.com/lkarsten/libvmod-cookie检查Cookie vmod。
对于varnishlog,您可以使用:
varnishlog -I BereqHeader:^Cookie