解决nginx已经配置过跨域不生效问题
nginx已经配置过跨域不生效问题
前端访问后台时提示跨域
服务器nginx配置如下
server { listen 80; server_name xxxxxx.com; location / { proxy_pass http://localhost:8061/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,token,platform; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT; add_header Access-Control-Allow-Credentials true; proxy_set_header x-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; access_log /var/log/nginx/api-access.log; error_log /var/log/nginx/api-error.log; }
很多文章都是说要加上
add_header Access-Control-Allow-Origin *;
但事实证明我这里已经配置了,还是报跨域,经过查询后发现关键点在这里
if ( $request_method = 'OPTIONS' ) { return 200; }
最终的配置就是
server { listen 80; server_name xxxxxx.com; location / { proxy_pass http://localhost:8061/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,X-Data-Type,X-Requested-With,token,platform; add_header Access-Control-Allow-Methods GET,POST,OPTIONS,HEAD,PUT; add_header Access-Control-Allow-Credentials true; proxy_set_header x-real-ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; if ( $request_method = 'OPTIONS' ) { return 200; } access_log /var/log/nginx/api-access.log; error_log /var/log/nginx/api-error.log; }
因为 post 请求 浏览器会发送一个 options 的预检请求,主要将本次的请求头 发送给服务端,若服务端允许,再发送真正的post请求,所以 f12 看到,经常 post 会发送两次请求。
因为后端 java 代码没有对 options 请求做出处理,导致 options 接口请求的时候,报 403 forbidden , 这里 nginx 对 options 的请求直接返回 200,不用到达接口层,直接允许 post 响应头,即可使得上述失效配置能够生效
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
nginx-ingress-controller日志持久化方案的解决
这篇文章主要介绍了nginx-ingress-controller日志持久化方案的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-03-03Nginx服务器下使用rewrite重写url以实现伪静态的示例
这篇文章主要介绍了Nginx服务器下使用rewrite重写url以实现伪静态的示例,这里举了Discuz!和WordPress这两个常用的PHP程序,需要的朋友可以参考下2015-12-12强大的 Web 应⽤服务器OpenResty安装(Nginx仓库)
OpenResty 是⼀个强大的 Web 应⽤服务器,Web 开发⼈员可以使用 Lua 脚本语⾔调动 Nginx ⽀持的各种 C 以及 Lua 模块,更主要的是在性能方面,OpenResty可以快速构造出足以胜任 10K 以上并发连接响应的超高性能 Web 应用系统2023-06-06Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
这篇文章主要介绍了Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度),需要的朋友可以参考下2022-01-01
最新评论