【发布时间】:2017-01-09 09:11:32
【问题描述】:
几个月前我开始使用 Varnish,我的 vcl 文件开始变得复杂。我使用相同的清漆实例(使用不同的后端)为 5 个不同的站点提供服务,这部分工作正常。
现在我有一些情况,对于某些网站,我需要保留一些 cookie 并根据它们缓存不同的版本。基本场景是仅在用户第一次看到该页面时向他显示一条消息。如果 cookie 不存在,则没有清漆,我设置它并显示消息。下次有 cookie 时不会显示任何消息。
使用 varnish,我的逻辑是将 cookie 包含在哈希中并缓存两个不同的版本。挑战是确保 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吗?
【问题讨论】:
标签: caching cookies varnish varnish-vcl