如何获取 nginx 代理中前端返回的“Set-Cookie”头中所有 cookie 的内容

https://forum.openresty.us/d/6503-get-content-of-second-set-cookie-header 中提到的问题相似。

我有一个 nginx 配置,它获取上游 auth_request 存储在 Set-Cookie 中的 cookie,并且我需要将这些 set-cookie 返回给客户端,但是无论我尝试返回哪些 cookie,都只有第一个 set-cookie 返回给客户端。

以下是演示此问题的示例配置

 location /auth/ {
    proxy_pass         http://auth/;
    proxy_pass_request_body off;
    proxy_redirect     off;
  }

  location / {
    auth_request       /auth/loggedin;
    auth_request_set $auth_cookie $upstream_http_set_cookie;
    add_header Set-Cookie $auth_cookie;
    proxy_set_header Cookie "$http_cookie; $auth_cookie";
    proxy_pass         http://someservice/;
  }

在我的示例中,我希望多个 cookie 可以在 Set-Cookie 头 a=12; PATH:"/", b=2; PATH:/" 中返回,并且我想通过 add_header 将来自上游服务的任何 set-cookie 传递到客户端浏览器。目前只有 cookie a 到达客户端,而 b 总是丢失。

注意: 我希望它具有普遍性,因此不能从头部获取精确的 cookie 名称。

感谢您提供的任何帮助!

原文链接 https://stackoverflow.com/questions/69818474

点赞
stackoverflow用户5185763
stackoverflow用户5185763

我发现没有其他办法,只能使用 Lua 模块。这应该部分回答了你的问题,它确实回答了问题“如何获取所有的 Set-Cookie 头”。

location / {
    log_by_lua_block {
        local cookies = ngx.resp.get_headers()["Set-Cookie"]
        if cookies~=nil then
            ngx.log(ngx.ERR, table.concat(cookies, ','))
        end
    }
...
}

如果您使用的指令与 log_by_lua_block 不同,我不能保证您能够看到特定的标头,使用 access_by_lua_block 我无法看到。 如果你想将东西传递给客户端,可能 log_by_lua_block 在工作流程中有点晚了,也许尝试一个更早的方法。

2022-04-29 12:07:23