【问题标题】:How to make nginx CORS configuration(add_header) work?如何使 nginx CORS 配置(add_header)工作?
【发布时间】:2019-03-26 06:13:16
【问题描述】:

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

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).

响应头是这样的:

我不知道如何让它工作。

【问题讨论】:

  • 你最终解决了这个问题吗?

标签: nginx header cors add


【解决方案1】:

试试这个

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

【讨论】:

  • 如果我去掉proxy_pass的http前缀,服务器无法启动,日志显示:invalid URL prefix in /etc/nginx/conf.d/default.conf:30。于是我把http前缀加到172.20.10.2:8080上,还是不行
【解决方案2】:

根据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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2021-10-28
    • 2021-03-24
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2017-04-15
    相关资源
    最近更新 更多