仅当 cookie 存在时,如何有条件地覆盖 nginx 中的 header?

How to conditionally override a header in nginx only if a cookie exist?

有没有办法检查 nginx 中是否存在特定的 cookie?

现在我有一个像下面这样的部分来从 cookie 设置 header:

proxy_set_header x-client-id $cookie_header_x_client_id;

我想检查那个 cookie 是否存在然后设置 header,否则不要覆盖 header。

我试过:

if ($cookie_header_x_client_id) {
    proxy_set_header x-client-id $cookie_header_x_client_id;
}

但它不起作用并给出以下错误:

"proxy_set_header" directive is not allowed here in /etc/nginx/sites-enabled/website:45

有什么解决办法吗?

if context in nginx. This is related to the fact that if is part of the rewrite 模块中允许的指令数量有限;因此,在其上下文中,您只能使用模块文档中特别概述的指令。

解决这个 "limitation" 的常见方法是使用中间变量建立状态,然后使用像 proxy_set_header 这样的中间变量来使用指令:

set $xci $http_x_client_id;
if ($cookie_header_x_client_id) {
    set $xci $cookie_header_x_client_id;
}
proxy_set_header x-client-id $xci;