nginx的反向代理和负载均衡

nginx的反向代理和负载均衡:

代理:客户端通过一个指定的服务器,访问其他服务器,请求和响应都由指定服务器来为客户端进行处理,这个指定的服务器就是代理服务器

代理的方式:

四层代理:四层就是传输层,基于tcp/ip协议进行代理转发。只能实现基于ip和端口号的负载均衡,四层代理无法获取http请求中的URL信息。只能对数据包转发,也就是流量转发

七层代理:基于http协议的应用层代理,代理的是http的请求和响应

客户端访问代理服务器,代理服务器接受客户端的http请求,然后由代理服务器将http请求转发到内部的一组服务器上进行处理

响应结果,也由代理服务器把响应结果返回给客户端,客户端并不知道自己请求的是代理服务器还是内部服务器。代理服务器可以隐藏内部服务器的真实ip

别名:七层反向代理

正向代理:VPN就是正向代理

正向代理。也是访问代理服务器,但是客户端知道访问的是代理,代理服务器的地址请求

四层代理和七层代理之间的区别:

1.转发速度:四层速度快,四层只是转发数据包,走的是内核态。因为它不负责处理http请求,也不对数据包做任何处理

七层相对慢,对http的协议进行处理,走的是用户态,需要一系列验证和处理流程,因此速度相对较慢

2.适用场景:四层代理用于需要处理大并发连接请求的场景,只是针对tcp或者udp流量的转发

七层代理不适合高并发(硬件的条件可以满足一些场景的高并发),需要对http请求进行深入处理和控制的一些场景。例如web应用程序的负载均衡

反向代理的作用:

1.负载均衡,可以把请求分配到后台多个服务器上,从而分担服务器的负载,可以提高系统的可用性和稳定性

2.缓存加速,会话保持

3.安全保护,请求的是代理,响应的也是代理,后台的真实服务器隐藏了,保证了架构的安全

4.简化整个系统的结构:代理服务器和几台后端服务器,就可以形成一个逻辑服务,这个服务架构可以随时的进行弹性伸缩

作为反向代理如何实现以及负载均衡的算法:

基于两个模块实现的:四层和七层

七层的模块:upstream只能定义在http的模块当中的全局配置里。不能写在server里面,也不能在location中

四层的模块:stream只能定义在全局模块当中

实验题:基于http的反向代理

然后重启

之后三台机子分别写不同的内容方便区分

(一定要回,很重要)负载均衡的算法:

1.nginx自带的默认算法叫轮询,最简单的算法,请求轮流的分配到后端的服务器

适用于后端服务器处理能力相近的情况,默认算法,可以不声明

2.加权轮询:给后端服务器赋予权重,在默认轮询算法的基础之上,实现处理能力更高的服务器可以分配到更多的请求

不是完全按照比例来进行分配,只是权重高的服务器被请求的次数相对较多

实验题:加权轮询实验,在上一个实验上加上weight=数字

3.最少连接数算法:配置了之后,会把请求转发到当前连接数最少的后端服务器上。避免请求都集中在处理能力更强的服务器上

一般是配置加权轮询一起使用

在工作当中,加权轮询和最小连接上算法,可以配合使用,满足绝大部分的日常需求

实验题:配置最少连接数算法:

4.ip_hash算法:根据客户端的ip地址计算出一个hash值,然后将请求发送到后端服务器,同一个客户端的请求会被分配到上一次转发的服务器。这就是nginx实现会话保持的方式

如果后台服务器数量发送变化,请求的服务器可能会转移。原有的会话保持就会消失。在工作中会有个封板期的原因

实验:

5.URL_HASH,根据客户端请求的URL计算一个hash值,然后将请求发送到后端服务器,如果每一次请求的URL地址相同,请求都会被分配到同一个服务器。

请求地址发生变化,轮询的服务器也可能发生变化。

实验:

http请求,可以实现基于域名的负载均衡

需要三台主机

实验:

第一台配置

proxy_set_header HOST $host

意思是将客户端的请求头当中的HOST字段,传给代理服务器

http1.1协议当中,客户端的请求头当中必须包含HOST字段,否则认为你是无效请求

proxy_set_header X-der

将客户端的真实IP地址赋给代理服务器,后端服务器会判断,如果你的地址是恶意攻击IP,直接把代理服务器屏蔽

这也是为什么博客和B站能看到你的IP地址

实验:如何进行流量分发来实现

四层不能使用ip_hash

只能使用加权轮询 ,和最少连接数

负载均衡:

反向代理

七层代理,处理http请求

四层代,就是ip+端口,只是转发数据包。不能对http协议做任何处理,也解析不了请求地址

负载均衡的算法:

nginx的负载均衡:

默认轮询 rr

加权轮询 weight=3

最小连接数 least_conn

ip_hash nginx实现会话保持

url hash

四层和七层之间的区别:

四层快 因为是内核态 是传输层

七层慢 因为是用户态 是应用层

七层主要用于http请求的场景

四层是转发数据包就可以使用四层

访问静态页面,四层可以满足,如果转发动态请求,用七层代理

负载均衡算法:七层都可以使用,四层只能用加权轮询以及最小连接数

upstream只能写在http的全局模块

stream要写在整个配置的全局当中,而且stream只能是ip+端口

相关推荐
讯捷蓝达1 小时前
戴尔R720xd服务器卡死在 “Configuring Memory...Done“,换了内存还是卡?问题根本不在内存
运维·服务器
爱和冰阔落3 小时前
【Linux网络】TCP 服务器如何并发处理多个客户端?从 fork、僵尸进程到双重 fork
linux·运维·服务器·网络
陈希1234 小时前
Nginx 从入门到能扛事:反向代理、负载均衡与 HTTPS 实战
nginx·https·负载均衡
lisanmengmeng4 小时前
alertmanger 标签 rules 打上分组标签
linux·运维·服务器
Android系统攻城狮5 小时前
Linux FFmpeg深度解析之av_write_frame调用流程与实战(三十三)
linux·运维·服务器·ffmpeg·音视频进阶·ffmpeg音视频
上火的金鱼妹5 小时前
k8s生产实际问题排查(网关,数据库读写等)
运维·服务器
孙克旭_5 小时前
k8s基础组件与创建资源
运维·docker·容器·kubernetes
孙克旭_5 小时前
云原生基础之Containerd容器运行时
运维·云原生
分布式存储与RustFS5 小时前
RustFS 自建对象存储实战目录:110 篇按场景分类(持续更新)
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
无忧_wy5 小时前
MoneyPrinterTurbo 自动化视频生成实战指南
运维·人工智能·自动化·音视频