本文摘自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可以做web服务器吗
nginx安装依赖包
nginx的好处有哪些
nginx怎么重启
如何在linux中使用nginx设置负载平衡
nginx怎么部署项目到外网
nginx应用场景有哪些?
linux下关于nginx安装教程的图文详解
nginx启动的时候提示端口被占用怎么解决
使用systemctl命令启动nginx竟然报错了?什么原因?
更多相关阅读请进入《nginx》频道 >>
转载请注明出处:木庄网络博客 » nginx怎么解决跨域?