几个月前我开始使用Varnish,我的vcl文件开始变得复杂。我正在使用相同的清漆实例(使用不同的后端)为5个不同的站点提供服务,这部分正在运行。
现在我有一些情况,对于某些网站,我需要保留一些cookie并根据它们缓存不同的版本。基本方案是仅在用户第一次看到页面时向用户显示消息。没有清漆,如果没有cookie,我设置它并显示消息。下次cookie就在那里,没有显示任何消息。
使用varnish我的逻辑是将cookie包含在hash中并缓存两个不同的版本。挑战是确保正确设置cookie,这里我有点堆栈。我在我的vcl中添加了一些调试消息,由于某种原因,我没有在vcl_backend_response中看到我在服务器中设置的cookie。在例程中,我在开头有以下代码:
# AT: DEBUG
if(bereq.http.x-at-debug == "1") {
std.log("AT DEBUG - bereq URL: " + bereq.url + ". Cookies: '" + bereq.http.Cookie + "'");
std.log("AT DEBUG - beresp set-cookie: '" + beresp.http.set-cookie + "'");
}
我根据我的IP在vcl_recv中设置了x-at-debug标头,所以我只能跟踪我的请求。在服务器端,我看到设置了cookie“__IKUB_AL_Myikub_PopUp”,但是在vcl_backend_response中没有。
介于两者之间是否可以删除cookie?
答案 0 :(得分:0)
问题的核心是beresp.http.set-cookie只返回第一个set-cookie标头。如果你有更多,你需要清漆模块(https://github.com/varnish/varnish-modules)的头模块。小心,它只适用于清漆4.1。