使用nginx反向代理处理前后端跨域访问
本文主要解决:使用nginx反向代理处理前后端跨域访问的问题
1.何为跨域访问?
以下类型为跨域访问
1)不同域名间访问
www.zuiyoujie.com和www.baidu.com
2)同域名不同端口
www.zuiyoujie.com和www.zuiyoujie.com:8080
3)同于名不同协议
http和https
4)域名和该域名自己的IP
www.zuiyoujie.com和自己解析的IP:192.168.1.1
5)二级域名相同,三级级域名不同
aaa.zuiyoujie.com和ttt.zuiyoujie.com
www.zuiyoujie.com和zuiyoujie.com等
以下类型为本域访问:
1)同一域名不同的子路径
www.zuiyoujie.com/a.html和www.zuiyoujie.com/b.html
2.跨域的常见解决方法(摘录)
https://www.cnblogs.com/gabrielchen/p/5066120.html
目前来讲没有不依靠服务器端来跨域请求资源的技术
1.jsonp 需要目标服务器配合一个callback函数。
2.window.name+iframe 需要目标服务器响应window.name。
3.window.location.hash+iframe 同样需要目标服务器作处理。
4.html5的 postMessage+ifrme 这个也是需要目标服务器或者说是目标页面写一个postMessage,主要侧重于前端通讯。
5.CORS 需要服务器设置header :Access-Control-Allow-Origin。
6.nginx反向代理,可以找技术人员帮忙处理
3.跨域访问实例
报错如下:
Failed to load http://192.168.1.137:8081/service/getStation?Line=1: No 'Access-Control-Allow-Origin'header is present on the requested resource.
Origin 'http://192.168.1.136:8081' is therefore not allowed access.
错误分析:
禁止跨域问题其实是浏览器的一种安全行为
该问题是由于前端和后台服务器在不同服务器(IP)上,前端访问后台无法通过同一条链路传输数据导致的,这时如果直接ajax远程后台服务器,则会报错
解决方法:
配置nginx,将前端的访问请求和后端的响应都通过nginx反向代理进行处理
类似上面这个:
192.168.1.136:8081 是前端,
192.168.1.137:8081 是后台,tomcat
192.168..11 是nginx服务器
编辑nginx配置文件,配置以下内容
vim from_front_to_background.conf
# For Front end
server {
listen ;
server_name 192.168.1.11;
charset utf-;
location / {
proxy_pass http://192.168.1.136:8081;
}
}
# For background
server {
listen ;
server_name 192.168.1.11;
charset utf-;
location / {
proxy_pass http://192.168.1.137:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
以下参数可加可不加,看是否能用到
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
配置完成,重新加载nginx配置文件,前端访问192.168.1.11:8136进行后续调试即可
service nginx reload
其他可以添加的参数:
根据报错内容里找到的,我自己弄的话没用到也可以解决该问题,
如果有问题可以将以下参数添加到location标签里
add_header 'Access-Control-Allow-Origin' 'http://www.zuiyoujie.com';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET';
第一条:授权从www.zuiyoujie.com的请求,如果要相应来自任何域的请求可以将域名改成“*”,
也有说该方式适用于别人访问我们的情况
第二条:当该标志为真时,响应于该请求是否可以被暴露
第三天:指定请求的方法,可以是GET,POST等
ajax跨域请求测试,成功时,响应头是如下所示:
HTTP/1.1 OK
Server: nginx
Access-Control-Allow-Origin: www.zuiyoujie.com
完毕,呵呵呵呵
使用nginx反向代理处理前后端跨域访问的更多相关文章
- nginx反向代理实现前后端分离&跨域问题
1.代理和跨域 1.1 正向代理 1)用户希望代理服务器帮助其和要访问服务器之间实现通信,需要: a.用户IP报文的目的IP=代理服务器IP: b.用户报文端口号=代理服务器监听端口号: c.HTTP ...
- nginx反向代理ajax,解决跨域问题
server { listen 8000; server_name somename alias another.alias; location /a { add_header 'Access-Con ...
- 用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面
用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地 ...
- 配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题
配置nginx反向代理服务器,解决浏览器跨域调用接口的限制问题 - 大venn的博客 - CSDN博客https://blog.csdn.net/u011135260/article/details/ ...
- 用nginx的反向代理机制解决前端跨域问题
什么是跨域以及产生原因 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制 ...
- ngnix 反向代理来解决前端跨域问题
1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...
- Nginx作为web静态资源服务器——跨域访问
跨站访问 为什么浏览器禁止跨域访问 Nginx跨站访问 Syntax:add_header name value [always]; Default:—— Context:http,serve ...
- 用Nginx代理请求,处理前后端跨域
自从前端spa框架出现后,都是前后端分离开发了.我们在开发的时候难免会遇到跨域的问题.跨域这种问题解决的方法基本都是在服务端实现的.以java为例,我知道的有3种方法处理跨域: 1.使用 @Cross ...
- Nginx入门及如何反向代理解决生产环境跨域问题
1.Nginx入门与基本操作篇 注:由于服务器是windows系统,所以本文主要讲解Nginx在windows下的操作. 首先下载Nginx 解压缩,我们所有的配置基本都在万能的 nginx/conf ...
随机推荐
- Java final finally finalize有什么不同
① final 可以用来修饰类.方法.变量, ----final修饰的class代表不可以继承扩展 ----final的变量不可以修改 ----final的方法不可以override ----fina ...
- 337BRoutine Problem
/*给出你图片的长和宽的比例a:b 和摄像头的比例c:d,然后叫你求最后将图片放进摄像头 以后,剩余的面积比上摄像头的总面积,注意要化简为最简形式,而且摄像头要设置成至少一条边和图片相等 做法:先将两 ...
- bzoj1628 [Usaco2007 Demo]City skyline(单调栈)
Description Input 第一行给出N,W 第二行到第N+1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1 Output 输出一个整数,表示城市中最少包含的建筑物数量 Sa ...
- 20145204 《Java程序设计》第6周学习总结
20145204 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入/输出 数据流 I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据 ...
- 20145221 《Java程序设计》第七周学习总结
20145221 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章部分 - Lambda 认识Lambda语法 Lambda去可以重复,符合DRY原则,而且Lambda表达式 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第七周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 本周内容主要为书第十一章内容: 二叉查找树(附加属性的二叉树) 二叉查找树是对树中 ...
- 如何让.gitignore文件生效
改动过.gitignore文件之后,在repo的根目录下运行 # 先将当前仓库的文件的暂存区中剔除 git rm -r --cached . # 再添加所有的文件到暂存区,这时.gitignore文件 ...
- Vmware 设置NAT模式
NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网.也就是说,使用NAT模式可以实现在虚拟系统里访问互联网. NAT模式下的虚拟系统的TCP/IP配置信息是由V ...
- DataSet 和 DataTable 以及 DataRow
向DataSet中添加DataTable 会提示datatable已属于另一个dataset 本来的想法是每次都new一个DataTable,但是还是会报错 百度了一下,发现可以调用DataTable ...
- .Net频繁访问数据库的优化探究(一)
知识点:DataTable.Linq.lamda表达式.Cache 场景:查询部门的所有员工和管理员,并分配相应的权限 实现过程一般为:查询部门,遍历部门(查询员工.分配权限.查询管理员.分配权限) ...