本文摘自PHP中文网,作者(*-*)浩,侵删。
这里,我们利用Nginx的反向代理功能解决跨域问题,至于,什么是Nginx的反向代理,大家就请自行百度或者谷歌吧。
nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。 (推荐学习:nginx教程)
对于浏览器来说,访问的就是同源服务器上的一个url。而nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。
具体解决方案如下:
在nginx.conf中编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | server {
location / {
root html;
index index.html index.htm;
add_header 'Access-Control-Allow-Origin' '*' ;
}
location /apis {
rewrite ^.+apis/?(.*)$ / $1 break ;
include uwsgi_params;
proxy_pass http:
}
}
|
然后我把项目部署在nginx的html根目录下,在ajax调用时设置url从http://www.lyz.com/apistest/test变为/apis/apistest/test然后成功解决。
比如我之前请求的Ajax如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $.ajax({
type: "post" ,
dataType: "json" ,
data:{ 'parameter' :JSON.stringify(data)},
url: "http://www.lyz.com/apistest/test" ,
async: flag,
beforeSend: function (xhr) {
xhr.setRequestHeader( "Content-Type" , submitType.Content_Type);
xhr.setRequestHeader( "user-id" , submitType.user_id);
xhr.setRequestHeader( "role-type" , submitType.role_type);
xhr.setRequestHeader( "access-token" , getAccessToken().token);
},
success: function (result, status, xhr){
}
,error: function (e) {
layerMsg( '请求失败,请稍后再试' )
}
});
|
修改成如下的请求即可:
阅读剩余部分
相关阅读 >>
nginx负载均衡参数有哪些
nginx在linux下如何安装
nginx主要做什么
linux如何查看nginx是否启动
nginx怎么下载
linux教程之nginx的并发连接数和连接状态查询
nginx的基本特点有哪些
使用nginx和nginx-rtmp-module搭建流媒体服务器
nginx有哪些常见的应用场景
nginx是什么,做什么用的?
更多相关阅读请进入《nginx》频道 >>
转载请注明出处:木庄网络博客 » nginx怎么解决跨域?