如何使 nginx CORS 配置(add_header)工作?

How to make nginx CORS configuration(add_header) work?

nginx(v1.14) 是反向代理服务器,它发送api 请求到tomcat。我在 conf 文件中添加了一些 CORS 配置,但它不起作用。 Nginx 配置文件如下:

upstream tomcat_server1 {
    server 172.20.10.2:8080;
}


server {
        listen 80;

        root /opt/nginx/www;

        server_name 172.20.10.2;

        location / {
            proxy_pass http://tomcat_server1;
            add_header 'Access-Control-Allow-Origin' 'http://172.20.10.2:8080';
        }

        location ~* \.(gif|jpg|jpeg|png|css|js|ico|html)$ {
            root /opt/nginx/www/;
        }
}

似乎add_header指令不起作用,浏览器控制台显示如下信息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://172.20.10.2:8080/user/login?email=81438234%40qq.com&password=236e3402dbab51ea17f9f6f360993233. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).

响应头是这样的:

我不知道如何让它工作。

试试这个

location / {
           add_header 'Access-Control-Allow-Origin' 'http://172.20.10.2';
            proxy_pass 172.20.10.2:8080;
        }

根据Nginx Doc,add_header只会在响应码等于“200, 201 (1.3.10), 204, 206, 301, 302, 303, 304, 307 (1.1.16, 1.0.13), 或 308 (1.13.0)".

由于不知道这个事实,我只是为 400 响应代码苦苦挣扎了几个小时……最后通过分配“always”标志解决了问题,例如:

add_header 'Access-Control-Allow-Origin' 'http://172.20.10.2' always;