只有在cookie存在的情况下如何有条件地覆盖nginx中的头文件?

有没有办法来检查一个特定的cookie是否存在于nginx

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

 proxy_set_header x-client-id $cookie_header_x_client_id; 

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

我试过了:

 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 

任何解决scheme

在nginx的if语境中只允许有限数量的指令。 这与ifrewrite模块的一部分有关。 因此,在其上下文中,您只能使用模块文档中具体列出的指令。

围绕这个“限制”的常见方法是使用中间变量建立状态,然后使用像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;