目录
1、nginx的反向代理和负载均衡:
代理:客户端通过一个指定的服务器,访问其他服务器,请求和响应都有指定服务器来为客户端进行处理,这个指定的服务器就是代理服务器。
代理:四层代理,七层代理
七层代理:基于http协议的应用层代理,代理的是http的请求和响应
客户端访问的代理服务器,代理服务器接收客户端的http请求,然后由代理服务器将http请求转发到内部的一组服务器上进行处理
响应结果也由代理服务器把响应的结果返回给客户端,客户端并不知道自己请求的是代理服务器还是内部服务器,代理服务器可以隐藏内部服务器的真实ip
七层反向代理
**四层反向代理:**四层就是传输层,tcp/i协议进行代理转发。只能实现基于ip和端口的负载均衡,四层代理无法获取http请求的url信息。只是对数据包转发。流量分发。
1.1四层代理和七层代理的区别:
1、转发速度,四层速度快,四层只是转发数据包,走的是内核态,不负责处理http请求,也不对数据包做任何处理。七层相对慢,对http协议进行处理,而且走的是用户态,需要一系列验证和处理流程,速度相对较慢。
2、适用场景:四层代理适用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发。七层代理不适合高并发(硬件条件可以满足一些场景),需要对http请求进行深入处理和控制的场景。web应用程序的负载均衡。
1.2反向代理的作用:
1、负载均衡,请求分配到后台多个服务器上,分担服务器的负载,提高系统的可用性和稳定性
2、缓存加速,会话保持
3、安全保护,请求的是代理,响应的也是也是代理,后台的真实服务器隐藏了,保证了架构的安全
4、简化整个系统的结构:代理服务器和几台后端服务器,就可以形成一个逻辑服务,这个服务架构可以随时的进行弹性伸缩。
1.3作为反向代理如何实现以及负载均衡的算法:
七层模块:upstream只能定义在http的全局配置模块之中,不能写在server里面,location也不行。
四层代理:stream只能定义在全局模块之中。
1.4负载均衡的算法:
1、nginx自带的默认算法轮询,最简单的算法,请求轮流的分配到后端的服务器,适用于后端服务器处理能力相近的情况,默认算法,可以不声明。
2、加权轮询:给后端服务器赋予权重,在默认轮询算法的基础之上,实现处理能力的更高的服务器可以分配到更多的请求。不是完全按照比例来进行分配,只是权重高的服务器被请求的次数相对较多。
3、最少连接数的算法,配置了之后,会把请求转发到当前连接数最少的后端服务器上,避免请求都集中在处理能力更强的服务器上,一般是配合加权轮询一起使用。
在工作当中,加权轮询和最小链接算法,可以配合使用,满足绝大部分的日常需求。
4、ip hash 算法,客户端的ip地址计算出一个hash,然后将请求发送到后端服务器,同一个客户端的请求会被分配到同一台服务器。
5、URL HASH,根据客户端请求的URL计算一个HASH值,然后转发请求到后端服务器,如果每一次请求的url地址相同,都会分配到同一个服务器。
请求地址发生变化,轮询服务器也可能发生变化
**正向代理:**vpn就是正向代理
正向代理也就是访问代理服务器,但是客户端知道访问的是代理麻袋里服务器的地址请求
http请求,可以实现基于域名的负载均衡。
proxy_set_header HOST $host
将客户端的请求头当中的HOST字段,传给代理服务器。
http.1.1协议当中,客户端的请求头当中必须包含HOST字段,否则认为你是无效请求。
proxy_set_header x-real-IP $remote_add
将客户端的真实ip地址赋给代理服务器,后端服务器会判断,如果你的地址是恶意攻击ip,直接把代理服务器屏蔽。为什么博客和B站能看到你的P地址。
四层只能处理数据包,转发。
ip_hash得出一个HASH,转发到后台服务器,下一次相同的IP地址转发到同一台服务器,http协议来进行处理。
总结:
负载均衡:
反向代理
七层代理处理http请求
四层就是ip+端口,只是转发数据包。不能对http协议做任务处理,也解析不了请求地址。
负载均衡的算法:
nginx的负载均衡:默认轮询rr,加权轮询weight=3,最小连接数least_conn,ip_hash nginx实现会话保持,url hash
四层和七层之间的区别:
四层块 内核
七层慢 用户 应用层
七层主要用于http请求的场景
四层,转发数据包就可以使用四层
访问静态页面,四层可以满足,如果转发动态请求,用七层代理。
负载均衡算法:7层都可以使用,四层只能用加权轮询以及最小连接数
upstream只能写在http全局模块
stream要写在整个配置的全局当中,而且stream只能是ip+端口