Nginx

如何用 nginx 替換代理響應中的 Access-Control-Allow-Origin 標頭

  • August 23, 2018

我正在使用一個簡單的 nginx 實例將 REST 呼叫代理到另一台伺服器。我的代理的目的是允許使用 cookie 進行身份驗證。我有它的工作,除了一個問題。提供 REST 服務的伺服器正在發送標頭Access-Control-Allow-Origin *。對於基於 cookie 的身份驗證,該標頭過於寬鬆。我需要用更嚴格的標題替換該標題。

這是我的 nginx 配置的一個子集:

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我的回復中出現了兩個標題。如何替換從 REST 伺服器返回的標頭,以便最終響應中僅存在我的標頭版本?

最好的辦法是更改 REST 伺服器端的響應,但是,假設您無法控制 REST 伺服器,有一個用於 Nginx 的模組可以修改名為 ngx_headers_more 的標頭:https://github。 com/openresty/headers-more-nginx-module

您必須安裝模組(這可能涉及從原始碼建構 nginx 並在 ./configure 中添加模組,如 github 自述文件中所述)。對於您的特定問題,一旦安裝它,您可以在任何塊中添加此指令

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

引用自:https://serverfault.com/questions/751678