- 2-0 在Nginx中解决跨域问题
- 跨域问题
- CROS跨域资源共享
- axios测试跨域
- 解决跨域问题
- SpringBoot配置
- Nginx跨域配置支持
- 2-1 在Nginx中配置静态资源防盗链
- 2-2 Nginx的模块化设计解析
- Nginx模块
- Nginx安装包说明
- 2-3 Nginx的集群负载均衡解析
- 单节点
- 集群
- 集群与负载均衡
- 2-7 四层、七层与DNS负载均衡
- 四层负载均衡
- 七层负载均衡
- 四层与七层负载均衡对比
- DNS地域负载均衡
- 2-7附:OSI网络模型
跨域问题的本质:两个站点域名不一样,就会出现跨域问题。所以跨域问题的本质是域名不同。
跨域问题的出现是出于安全问题,浏览器拒绝跨站点的访问,从而限制ajax从一个站点向另一个站点请求或访问资源,W3C标准规范
CROS:全称Cross-Origin Resource Sharing,允许浏览器向跨Origin的服务器发起js请求获取响应。
解决跨域的常用形式:Jsonp、StringBoot Cors、Nginx。
Document
解决跨域问题
SpringBoot配置
@Configuration
public class CorsConfig {
public CorsConfig(){
}
@Bean
public CorsFilter corsFilter(){
// 1.添加cros配置信息
CorsConfiguration config = new CorsConfiguration();
// tomcat部署前端项目url
config.addAllowedOrigin("http://192.168.168.11:8080");
// nginx部署前端项目url
config.addAllowedOrigin("http://192.168.168.11:90");
config.addAllowedOrigin("http://192.168.168.11:89");
// 放行所有站点
config.addAllowedOrigin("*");
// 设置是否发送coolie信息
config.setAllowCredentials(true);
// 设置允许的请求方式
config.addAllowedMethod("*");
// 设置允许的header
config.addAllowedHeader("*");
// 2.为url添加映射路径
UrlBasedCorsConfigurationSource corsSource = new UrlBasedCorsConfigurationSource();
corsSource.registerCorsConfiguration("/**", config);
// 3.返回重新定义好的corsSource
return new CorsFilter(corsSource);
}
}
Nginx跨域配置支持
修改imooc.conf,在相关server模块添加如下配置:
#允许跨域请求的域,*代表所有 add_header 'Access-Control-Allow-Origin' *; #允许带上cookie请求 add_header 'Access-Control-Allow-Credentials' 'true'; #允许请求的方法,比如 GET/POST/PUT/DELETE add_header 'Access-Control-Allow-Methods' *; #允许请求的header add_header 'Access-Control-Allow-Headers' *;2-1 在Nginx中配置静态资源防盗链
网站的图片、视频等资源如果不想被其他网站引用,可加入防盗链功能,加入后则只能自己域名访问,其他域名一概不能访问.
# 对源站点验证
valid_referers *.imooc.com;
# 非法引入会进入下方判断
if ($invalid_referer) {
return 404;
}
2-2 Nginx的模块化设计解析
Nginx模块
-
nginx core:实现了一部分的底层通信协议,为其他模块、nginx进程等提供运行时的环境,可以看作JVM。
-
event module:事件模块 (linux默认的事件机制:epoll,是操作系统层面的事件处理机制)。
-
phase handler:处理客户端请求以及相应内容的响应
-
output filter:过滤器,会过滤一部分的内容,把内容再返回到浏览器,再去做响应。例如gzip,压缩的过程就是过滤的过程。
-
upstream:反向代理模块,会把真正的请求转发到真实的服务器,去响应真实的内容。
-
load balancer:负载均衡,实现集群、负载均衡的一些配置。
-
extend module:继承模块,相当于第三方模块 。
- auto 自动:nginx会自动检测识别操作系统和编译脚本
- CHANGES:历史版本号,包含nginx的一些历史版本信息
- CHANGES.ru:俄罗斯版本
- conf 配置 :默认存放的配置文件,安装完毕后会将 安装包conf 目录中的文件 拷贝到安装目录中
- configure:做编译配置
- contrib:提供相应工具
- html:默认存放的一些静态文件,安装完毕后会将 安装包html 目录中的文件 拷贝到安装目录中
- LICENSE:说明,协议说明等
- Makefile:编译make之后生成的文件
- man:nginx守则
- objs:整合第三方插件,安装完毕后会放在objs下方
- README:
- src:nginx源码
- core:核心源码
- event:事件处理的一些机制,封装了相应的方法、模块;
- http:upstream 反向代理;upstream_round_robin 负载均衡
- mail:nginx可以作为一个邮件的代理服务器去收发邮件的
- misc:辅助的功能、辅助的代码
- os:操作系统 和系统级别的封装在这里
- stream:流 包含upstream反向代理流
CHANGES文件:
conf目录:
html目录:
很累---> 压力大 生病---> 服务器瘫痪 虽说单节点处理,按正常理论上来说,请求多少都会处理完,,但是会有瓶颈,多节点就是为了解决瓶颈问题集群
优点:整体性能高、效率高
缺点:成本提高
原则:1 + 1 > 2
Nginx的作用:网关、反向代理器、负载均衡器
upstream:所有的tomcat服务器,代表上游服务器。
注意:用户的所有请求都会有可能到达集群中其它任意一个tomcat节点,这就涉及到nginx的负载均衡。
负载均衡:把用户的所有请求平均的分配的其他后台的所有tomcat节点,当然也可以根据每一个后台服务器本身能承载的并发量大小,去根据它的权重去配置,也可以根据url地址到达某些特定的tomcat里。
当Tomcat1服务器挂了,由于它在这个集群环境中,虽然之前的请求访问了Tomcat1,当它挂了后,以后请求不会再去访问Tomcat1,而是向其他服务器去请求。
负载均衡的作用:
- 能够为企业网络设备或者服务器带来更好的服务,提高吞吐量、提升并发性能、增强服务器的处理能力。
- 可以提高服务器计算能力,使得我们的网络设备更加灵活。
- 当有大量的并发请求来到服务器的时候,能够把这些请求分配到多台计算机节点上,让更多的节点来处理请求和响应,如此就可以大大缩减用户请求的等待时间。
四层负载均衡是基于IP + 端口的负载均衡。
原理是通过转发请求到后台的服务器,它只负责转发并且会记录当前连接是由哪个服务器处理的,后续这个连接的请求就会由同一台服务器去处理,其实相当于长连接,这个长连接一旦打开就会一直处理连接的状态,它的性能就会非常高。
四层是基于传输层的,主要基于 TCP和UDP。
1.F5硬负载均衡
- 基于硬件的硬负载均衡,功能强,性能高,稳定性好
- 商业级别的负载均衡,很贵,因为是基于硬件的
2.LVS四层负载均衡
- 是Linux内核的四层负载,和协议无关,主要负责转发一些请求的,是基于CS端的
3.Haproxy四层负载均衡
- 支持转发功能,灵活性非常高,除了四层以外也能够做七层的负载均衡
4.Nginx 四层负载均衡
- 新版本里也能够做四层负载均衡,一般还是做七层负载均衡,以七层为主,主要是基于HTTP的一个负载均衡
- 在nginx1.9版本后,新增了一个基于stream的四层负载均衡,可以用于实现四层协议的转发、代理等等
七层负载均衡是基于URL或IP的负载均衡,是基于应用层的,是针对于HTTP协议的一个负载均衡。
1.Nginx七层负载均衡:
- 对http协议或邮箱协议做负载均衡,性能强劲
2.Haproxy七层负载均衡:
- 灵活性很高
3.apache七层负载均衡:
- 性能远不如nginx高,当并发达到百万级别后性能会越来越差
四层
- 一般会使用LVS;
- 四层负载均衡主要适用于处理基于tcp、udp协议的负载均衡;
- 四层是用于转发请求,而不是处理请求,它可以把用户请求转发给其他应用去处理。
举例:黄牛不会处理用户诉求,只会把票卖你,比如想买第一排的票,但是他没有,你爱买不买,买了后也需要自己去找座位。
七层
- 主要使用Nginx。
- 七层一般用于处理http协议的,适用于web服务器,比如tomcat、apache、nginx;
- 七层是会处理请求的,比如Nginx可以去处理(压缩或者缓存)静态资源等内容。
举例:售票处可以根据用户需求处理, 会提供一些相应服务。
客户端与DNS服务器交互,从DNS服务器获取当前的某一个IP,通过域名解析到的IP(是后端某个服务器的公网IP),DNS会根据客户端所在地域去进行反馈,采取请求的就近原则访问最近的服务器。
优点:所有的负载均衡工作交由DNS服务器去处理,根据IP地址采用就近原则访问最近的服务器,提高用户的访问速度。
网络模型就是OSI(Open System Interconnect),意思为开放网络互联,是由国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版的,他是一种网络互联模型,也是一种规范。



