通过Nginx代理解决跨域的思路

245 阅读1分钟

思路一: 在前端请求非跨域地址,在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…

思路二