跨域的解决方案:nginx

一:解决方案

1、 通过jsonp跨域 2、 document.domain + iframe跨域 3、 location.hash + iframe 4、 window.name + iframe跨域 5、 postMessage跨域 6、 跨域资源共享(CORS) 7、 nginx代理跨域 8、 nodejs中间件代理跨域 9、 WebSocket协议跨域

二:使用nginx代理跨域

使用nginx反向代理实现跨域,是最简单的跨域方式。只需要修改nginx的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。

实现思路:通过nginx配置一个代理服务器(域名与domain1相同,端口不同)做跳板机,反向代理访问domain2接口,并且可以顺便修改cookie中domain信息,方便当前域cookie写入,实现跨域登录。

三:正向代理和反向代理

实践中客户端无法直接跟服务端发起请求的时候,我们就需要代理服务。代理可以实现客户端与服务端之间的通信,我们的Nginx也可以实现相应的代理服务。代理分为正向代理和反向代理,正向代理的代理对象是客户端,反向代理的代理对象是服务端
server {
          
     
    resolver 192.168.1.1; #指定DNS服务器IP地址  
    listen 8080;  
    location / {
          
     
        proxy_pass http://$http_host$request_uri; #设定代理服务器的协议和地址  
        //$http_host$request_uri指明目的主机和uri,属于nginx变量,一般不需要修改。
    }  
}
  1. 反向代理 1.概念:在服务端配置代理服务器。客户端不需要任何配置就能访问,只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器,获取数据后再返回给客户端。对外就一个服务器,暴露的是反向代理服务器地址,隐藏了真实服务器IP地址。 代理对象是服务端,不知道客户端是谁。

2.配置:nginx配置如下

server {
          
   
    listen       80;  //listen:配置nginx监听浏览器请求的端口号
    location /demo {
          
   
        proxy_pass http://127.0.0.1:8081;  //proxy_pass:配置接收到被代理浏览器发来的请求之后,需要帮忙执行的请求是什么
    }
    location /demo1 {
          
   
        proxy_pass http://127.0.0.1:8082;
    }
}

启动demo和demo1两个工程之后,浏览器输入下面地址:

可以看到,外部统一使用80端口访问服务时,nginx根据路径前缀进行代理,然后返回执行结果。对于nginx反向代理路径配置有几点需要注意,使用时要非常谨慎。

四:vuejs开发服务器的代理

参考:

经验分享 程序员 微信小程序 职场和发展