思路一: 在前端请求非跨域地址,在Nginx代理转发至指定地址
假设前端和后端服务都部署在a.com 的服务器上,前端部署在默认的80端口,后端部署在7001端口。
如果前端此时请求 a.com:7001/query 接口,由于端口不同就跨域了;那如果直接请求80端口呢 a.com/query ,协议、地址、端口就都一样了,不会再跨域。问题在于我的后端服务部署在7001端口呀,请求80端口能访问到个啥,这时候就由Nginx出手了。
Nginx的一项默认服务配置:
server {
# 代理的是80端口,所有80端口的请求都会被这个server代理
listen 80 default_server;
listen [::]:80 default_server;
# 如果使用SSL则使用下面的配置
# SSL configuration
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
# 站点路径
root /var/www/html;
# 入口文件
index index.html index.htm index.nginx-debian.html
server_name _;
# 下面就是具体的代理了
# 所有80端口 /api/的请求都会被代理到 http://a.com:7001,在避免跨域的同时能够正常请求到后端服务
location /api/ {
proxy_pass http://a.com:7001/
#下面几行是用来配置后端的跨域的,这里并不需要
#必须字段,表示允许跨域,值为允许的域名,可以为*
#add_header 'Access-Control-Allow-Origin' '*';
#可选字段,表示是否允许发送cookie,值为布尔值
#add_header 'Access-Control-Allow-Credentials' 'true';
#必须字段,表示跨域请求允许的http方法,可以为*
#add_header 'Access-Control-Allow-Methods' '*';
}
}
porxy_pass 具体替换规则见 blog.csdn.net/liushuyul/a…
相同思路见 juejin.cn/post/699394…
其他参考见 juejin.cn/post/699537…