(三)ajax请求不同源之nginx反向代理跨域

时间:2022-09-28 06:26:13

一、基本原理

nginx是一个高性能的web服务器,常用作反向代理服务器。nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。

用nginx反向代理实现跨域,是最简单的跨域方式,而且支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能,只需要修改nginx的配置即可。
在nginx服务器上配置多个前缀来转发http/https请求到多个真实的服务器,nginx服务器上所有url都是相同的域名、协议和端口,没有跨域限制。

nginx服务器欺骗了浏览器,让它认为这是同源调用,从而解决了浏览器的跨域问题。又通过重写url,欺骗了真实的服务器,让它以为这个http请求是直接来自用户浏览器的。

二、测试步骤

1、安装nginx

2、修改请求的URL

如果页面www.xxx.com/html/userInfo.html请求www.yyy.com/api/getUserInfo?name=camille&age=18,通常会这么写

$.ajax({
  url:'www.yyy.com/api/getUserInfo?name=camille&age=18',
  type:'GET',
  success:function (data){

  }
})

明显会存在跨域现象,此时应该修改请求的URL。

var proxyurl ='api/getUserInfo?name=camille&age=18';
//假如实际地址是www.zzz.com/proxy/html/api/getUserInfo?name=camille&age=18; www.zzz.com是nginx主机地址
$.ajax({
  url:proxyurl,
  type:'GET',
  success:function (data){

  }
})

3、修改nginx的配置文件

server{
  listen 8080;
  server_name localhost;
  location / { #nginx用来路由的入口
    root html;
    index index.html index.htm
  }
  location ^~/proxy/html/{
    rewrite ^/proxy/html/(.*)$ /$1 break;
    proxy_pass http://www.yyy.com/;
  }
}