您的位置:首页 > 运维架构 > Nginx

nginx实现网关解决跨域问题(大型网关接口系统)

2017-10-17 00:00 441 查看
摘要: nginx,跨域

跨域问题:不同网站之间的请求连接,比如两台服务器之间

1 http://www.a.com/a.js http://www.a.com/b.js               同一域名下	允许
2 http://www.a.com/a/a.js http://www.a.com/b/b.js            同一域名不同文件夹	允许
3 http://www.a.com:8080/a.js http://www.a.com:9090/a.js        同一域名不同端口号	不允许
4 http://www.a.com/a.js https://www.a.com/b.js             同一域名不同协议	不允许
5      http://www.a.com/a.js http://192.168.4.158/b.js            域名与域名对应的ip地址	不允许
6 http://www.a.com/a.js http://wwww.a.com/b.js            主域名相同,子域名不同	不允许
7 http://www.a.com/a.js http://www.b.com/b.js                不同域名	不允许

解决方案
①ajax的jsoup
可以利用ajax的jsoup解决跨域问题,但是只能是get请求,而且大型公司都不这么用

基本上都是利用nginx网关代理实现跨域问题

项目中调用别人的接口,出现了跨域问题,利用ajax跨域问题,利用了jsoup进行获取,但是只能是get请求,后来用网关系统

②XHR2(修改请求头)
“XHR2” 全称 “XMLHttpRequest Level2” 是HTML5提供的方法,对跨域访问提供了很好的支持,并且还有一些新的功能。修改了请求头,不安全,不推荐

IE10以下的版本都不支持

只需要在服务器端头部加上下面两句代码:

header( "Access-Control-Allow-Origin:*" );
header( "Access-Control-Allow-Methods:POST,GET" );

③使用后台服务转发
非常占宽带,不介意使用,所有服务都放到本站,所有请求都通过http转发。

比如说将A系统中的服务地址封装在B项目中的一个方法中利用HTTPClient去访问

实际就是B项目访问自己内部的一个地址,内部通过HttpClient去访问,安全,不会暴露接口,但是耗资源,会发生两次请求

④使用nginx搭建网关服务(推荐)

nginx.conf
新建两个location
location /A http://a.a.com:81/A
location /B http://b.b.com:81/B

这两个server之间访问是会出现跨域的问题。

server {
listen       80;
server_name  www.liaoxiang.com;
location /A {
proxy_pass  http://a.a.com:81/A; index  index.html index.htm;
}
location /B {
proxy_pass  http://b.b.com:81/B; index  index.html index.htm;
}
}

http://www.liaoxiang.com/A/* A项目的地址

http://www.liaoxiang.com/B B项目的地址

都是通过一个域名去访问,就不会出现跨域的问题

这里测试中,如果在 http://b.b.com:81/B

去调用http://a.a.com:81/A

中的数据时会出现跨域问题的

但是如果都被nginx代理,然后通过

www.liaoxiang.com

去访问的话,同一域名下就不会出现跨域的问题

这样就可以在

http://b.b.com:81/B

中去调用

http://a.a.com:81/A

中的页面或者数据

不换行的话这里全在一起,不好看,这样的话还可以,域名比较清晰,理解一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐