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+端口

相关推荐
乘云数字DATABUFF20 小时前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--3 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森3 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜3 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB4 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode6 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220706 天前
如何搭建本地yum源(上)
运维
ping某8 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树889 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠9 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql