首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
Nginx日志推送到远程服务器
Nginx获取客户端真实IP、域名、协议、端口
负载均衡、限流、缓存、黑白名单和灰度发布
Nginx生成缩略图
Nginx封禁IP和IP段
按日期分割Nginx日志
配置Nginx日志
为已安装的Nginx动态添加模块
Nginx配置WebSocket
Nginx实现MySQL数据库负载均衡
Nginx解决跨域问题
Nginx搭建流媒体服务器
Nginx支持高并发配置
Nginx的高可用负载均衡
当前位置:
首页>>
技术小册>>
Nginx典型应用场景
小册名称:Nginx典型应用场景
###为何会跨域? 出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)。 ###Nginx如何解决跨域? 这里,我们利用Nginx的反向代理功能解决跨域问题,至于,什么是Nginx的反向代理,大家就请自行百度或者谷歌吧。 Nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url。而Nginx通过检测url前缀,把http请求转发到后面真实的物理服务器。并通过rewrite命令把前缀再去掉。这样真实的服务器就可以正确处理请求,并且并不知道这个请求是来自代理服务器的。 ###Nginx解决跨域案例 使用Nginx解决跨域问题时,我们可以编译Nginx的nginx.conf配置文件,例如,将nginx.conf文件的server节点的内容编辑成如下所示。 ``` server { location / { root html; index index.html index.htm; //允许cros跨域访问 add_header 'Access-Control-Allow-Origin' '*'; } //自定义本地路径 location /apis { rewrite ^.+apis/?(.*)$ /$1 break; include uwsgi_params; proxy_pass http://www.maxiaoke.com; } } ``` 然后我把项目部署在nginx的html根目录下,在ajax调用时设置url从http://www.maxiaoke.com/apistest/test 变为 http://www.maxiaoke.com/apis/apistest/test然后成功解决。 假设,之前我在页面上发起的Ajax请求如下所示。 ``` $.ajax({ type:"post", dataType: "json", data:{'parameter':JSON.stringify(data)}, url:"http://www.maxiaoke.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('请求失败,请稍后再试') } }); ``` 修改成如下的请求即可解决跨域问题。 ``` $.ajax({ type:"post", dataType: "json", data:{'parameter':JSON.stringify(data)}, url:"http:www.maxiaoke.com/apis/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实现MySQL数据库负载均衡
下一篇:
Nginx搭建流媒体服务器
该分类下的相关小册推荐:
Nginx面试指南