1

根据欧洲关于 cookie 的规则,我们需要显示一条消息,让用户知道我们使用 cookie。

当他们接受时,我们设置一个 cookie!除了严重依赖跟踪 cookie,我们还需要这个 cookie :(

我已经设置了 Varnish 来缓存资产和我的登录页面,这自然会对速度产生巨大影响。资产在做梦,主页永远不会从服务器接收 Set-Cookie,因为这就是 Varnish 开箱即用的配置方式。

我们的 varnish 服务器是 Centos 7,它已经安装了 Varnish 4。我们的目标是最终迁移到 Fastly,他们有一个指南来做我想做的事,它允许我们使用 Cookie 并避免缓存它们。

https://www.fastly.com/blog/how-to-cache-with-tracking-cookies

然而, req 变量不再在vcl_deliverVarnish 4 的范围内。

有没有人能够找到解决这个问题的方法?

4

1 回答 1

1

您应该能够将“Tmp-Cookie”存储在beresp而不是bereq中,在这种情况下,它将传播到resp中的vcl_deliver。然后,您可以将其复制到Set-Cookie

所以快速推荐的修改版本:

sub vcl_backend_response {
    if (beresp.http.Set-Cookie) {
        # ... so store it temporarily
        set bereq.http.Tmp-Set-Cookie = beresp.http.Set-Cookie;
        # ... and then unset it
        unset beresp.http.Set-Cookie;
    }
}

sub vcl_deliver {
    if (resp.http.Tmp-Set-Cookie) {
        set resp.http.Set-Cookie = resp.http.Tmp-Set-Cookie;
        unset resp.http.Tmp-Set-Cookie;
    }
}

这应该等同于响应处理,但您仍然希望最有可能处理传入的请求 cookie(如果相关)。

于 2016-04-03T18:44:33.237 回答