NGINX仅当上游响应自定义报头时才设置报头

tvz2xvvm  于 2022-12-17  发布在  Nginx
关注(0)|答案(1)|浏览(127)

我有一个上游服务器,它只在一些请求上设置Session-ID头,我想在cookie中转发该会话ID。
我试过这样的。

add_header   Set-Cookie "session_id=$sent_http_session_id;";

这适用于上游服务器设置标头的请求,但对于不存在标头的请求,这将导致以下HTTP标头:Set-Cookie: session_id=;,覆盖正确的cookie。
我尝试使用if,但不起作用

if ($sent_http_session_id) {
    add_header   Set-Cookie "session_id=$sent_http_session_id";
}

如何仅在上游响应自定义标头时才设置标头?

dxpyg8gm

dxpyg8gm1#

经过大量的谷歌搜索(我们甚至看了第2:P页),我们找到了一个解决方案:
这适用于map,其中$sent_http_session_id指的是我们想要Map的头(见此处):

map $sent_http_session_id $header_to_cookie {
    ""  "";                                     # No header results in no cookie
    default "session_id=$sent_http_session_id"; # Mapping from custom header to cookie
}

server{
    # ...
    
    location / {
        # ... 
        add_header                  Set-Cookie $header_to_cookie;
    }
}

相关问题