【问题标题】:Varnish remove specific cookies from backend responseVarnish 从后端响应中删除特定的 cookie
【发布时间】:2012-12-15 00:53:37
【问题描述】:

我需要从 varnish 的后端响应中删除特定的 cookie。

我的后端服务器设置了一堆我不需要的 cookie,不幸的是我无法控制,所以我想删除它们。

但是我需要一些 cookie,所以我希望能够按名称删除 cookie。

例如我想重命名一个名为 bad_cookie 的 cookie,但同时保留一个名为 good_cookie 的 cookie。

我找到了很多关于删除特定请求 cookie 的资源,但没有找到关于删除后端响应 cookie 的资源。

这在 Varnish 中可行吗?

【问题讨论】:

    标签: cookies varnish varnish-vcl


    【解决方案1】:

    如果你想重命名,我想应该是这样的:

    sub vcl_fetch {
        #renamed after receiving the backend
        set beresp.http.set-cookie = regsuball(beresp.http.set-cookie, "bad_cookie", "good_cookie"); 
        set beresp.http.cookie = regsuball(beresp.http.cookie, "bad_cookie", "good_cookie"); }
    }
    
    sub vcl_deliver {
        #renamed before sending the client
        set resp.http.set-cookie = regsuball(beresp.http.set-cookie, "bad_cookie", "good_cookie"); 
        set resp.http.cookie = regsuball(beresp.http.cookie, "bad_cookie", "good_cookie"); }
    }
    

    如果您想删除所有 cookie:

    sub vcl_fetch {
        #deleted after receiving the backend
        remove beresp.http.set-cookie;
        remove beresp.http.cookie;
    }
    
    sub vcl_deliver {
        #deleted before sending the client
        remove resp.http.set-cookie;
        remove resp.http.cookie;
    }
    

    beresp.http.set-cookie只读取第一个Set-Cookie标头,如果你想删除一些并保留其他可以使用:github.com/varnish/libvmod-header**

    【讨论】:

    • 删除 vcl_fetch 中的 beresp.http.set-cookie 将删除所有 cookie。看起来您无法删除某些响应 cookie 并保留其他 cookie,因为删除 beresp.http.set-cookie 仅读取第一个 Set-Cookie 标头。还没找到解决办法
    • 你是对的,对于多个 set-cookie 标头可以使用:github.com/varnish/libvmod-header
    • 是的 vmod_header 完全符合我的要求...谢谢。
    • @MartinTaleski 太棒了!我改了答案!
    猜你喜欢
    • 2012-04-06
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多