【问题标题】:Varnish caching for some cookies?一些cookie的清漆缓存?
【发布时间】: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


    【解决方案1】:

    问题的核心是 beresp.http.set-cookie 只返回第一个 set-cookie 标头。如果你有更多你需要清漆模块的头模块(https://github.com/varnish/varnish-modules)。请注意,它仅适用于 varnish 4.1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2016-05-25
      • 2012-09-20
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-07
      相关资源
      最近更新 更多