我如何在代理响应中用nginxreplaceAccess-Control-Allow-Origin标头

我正在使用一个简单的nginx实例将REST调用代理到另一台服务器。 我的代理的目的是允许使用cookie进行身份validation。 我有它的工作,除了一个问题。 提供REST服务的服务器正在发送标题Access-Control-Allow-Origin * 。 该标头对基于cookie的身份validation过于宽松。 我需要用一个更具限制性的标题replace这个标题。

这是我的nginxconfiguration的一个子集:

 map $http_origin $cors_header { default ""; "~^https?://[^/]+\.mydomain\.com(:[0-9]+)?$" $http_origin; } server { location / { proxy_pass https://myrestserver.com/api; add_header Access-Control-Allow-Origin $cors_header; add_header Access-Control-Allow-Credentials true; } } 

我的问题是,我最终有两个Access-Control-Allow-Origin头文件出现在我的响应中。 如何replace从REST服务器返回的头文件,以便在最终响应中只有我的头文件版本?

最好的做法是改变REST服务器端的响应,但是,假设你没有控制REST服务器,Nginx有一个模块可以修改名为ngx_headers_more的头文件: https://github。 COM / openresty /标头-更nginx的模块

你将不得不安装模块(这可能涉及从源代码构buildnginx,并在./configure中添加模块,如github自述文件中所述)。 对于你的具体问题,一旦你安装它,你可以在任何块添加此指令

 more_set_headers "Access-Control-Allow-Origin: $cors_header"