nginx正向代理、反向代理、负载均衡(重中之重)

nginx中有两种代理方式:

七层代理(http协议)

四层代理(基于tcp或udp的流量转发)

一、七层代理

原理:客户端请求代理服务器,由代理服务器转发客户端的http请求,转发到内部的服务器。(服务器是单台或一组)。后台的web server再把响应送达代理服务器,最后到达客户端

****反向代理------****客户端不知道访问的是哪台web服务器,具体访问哪台是由负载算法决定的

****正向代理------****客户端知道访问的是哪台web服务器

二、四层代理:

基于tcp /ip协议层的转发代理方式。基于ip和端口号实现负载均衡或正向代理。四层代理无法获取http请求中的URL信息,只能对tcp/udp的数据包进行转发

(重点) 四层代理和七层代理之间的区别:

1、七层代理走的是用户态 ,需对http的请求进行处理和解析,解析过程中可以根据请求头和请求体的内容进行一定的操作(流量控制、内容过滤等)。转发速度比较慢,但提供的功能更高级,用户体验更好------市面上常用

2、四层代理基于ip地址和端口号,只负责将ip转发到后端服务器,不对请求做任何处理,只负责转发,且四层转发走的是内核态,七层代理需校验,所以四层转发速度较快。四层代理无法提供更高级的功能,只是转发

3、选择场景:

七层代理:需要对http请求进行控制和处理,只能选择七层代理

四层代理:只转发tcp或udp数据包,选择四层或七层均可

七层代理可以对ip和端口进行转发,也可以对域名进行代理

四层只能对ip和端口进行转发

有些负载均衡算法无法在四层代理使用

4、模块:

七层代理只能写在http模块的全局配置中

配置命令:upstream

upstream模块用于处理http请求,支持反向代理,负载均衡,缓存功能。在upstream模块中可以配置多个服务器

四层代理只能写在全局模块中的单独配置

配置命令:stream模块

四层的反向代理:

三、(面试题) 负载均衡算法

1、rr(round robin)------轮询 (负载均衡最简单的算法)(不用)

原理:请求轮流分配到后端服务器。默认算法,可以不加

每发起一次都是新的请求,在服务器上没有缓存

2、weight------加权轮询 (常用)

weight=2;

建立在轮询算法基础上的

原理:为后端服务器分配不同的权重,处理能力强的服务器可以分配的权重值要高一些。轮询次数基本上按照权重进行分配的。服务器上也没有缓存

权重高的服务器会被频繁的请求响应,权重低的可能闲置,会和另一种算法配合使用(最少连接数算法)

3 最少连接数算法

least_conn;

原理:把请求发送到连接数量较少的后端服务器

可以单独使用此算法,但一般结合加权轮询一起使用,避免所有的请求都发送到处理能力强的服务器,可以提高整个集群的稳定性

适用于中型网站,大型网站的日常访问也满足

4 ip_hash算法

ip_hash;

原理:iphash会根据客户端的ip地址解析出一个hash值,然后将请求发送到对应的后端服务器,下一次用户再访问时同一客户端的请求将会被分配到同一台服务器

特点:①ip_hash第一次访问之后,后续访问有缓存

②如果后端服务器的数量改变,可能会重新分配服务器

③请求不会跳转,请求的是缓存------减轻服务器压力

5、url_hash算法

hash $request_uri consistent;

原理:根据请求的url地址计算hash值,然后将请求发送到后端服务器,相同的url地址请求会被分配到同一个服务器

特点:一般url_hash和ip_hash结合在一起使用。适用于并发较高的场景。主要是ip_hash和ip_hash访问之后,后续访问都是访问缓存,可以减轻后端服务器的压力

四、实验

(1)基于IP地址七层正向代理实验

vim /usr/local/nginx/conf/nginx.conf

vim /usr/local/nginx/html/index.html

测试

(2)基于IP地址七层反向代理实验

实验条件:nginx1------客户端------20.0.0.11

nginx2------服务端1------20.0.0.21

nginx3------服务端2------20.0.0.31

nginx4------服务端3------20.0.0.41

实验步骤:

1、nginx1

2、nginx2

3、nginx3

4、nginx4

5、测试

结论:默认轮询算法。轮流分配到每个后端服务器

6、结合负载均衡算法

结论:按照算法规则分配后端服务器。注意:同一ip地址请求,ip_hash和url_hash算法会有缓存,分到到同一后端服务器

(3)基于域名的七层反向代理实验

1、nginx1

ngin2

nginx3

nginx4

测试

(4)四层反向代理实验

nginx1

nginx -t出现" unknown directive stream"错误。

原因:在编译安装nginx时没有安装stream模块,nginx -t 无法识别stream

解决思路:在nginx源码包目录下重新配置./configure --with-stream并且make && make install

2、nginx2

3、nginx3

4、nginx4

5、测试

相关推荐
white.tie2 小时前
linux配置nginx
linux·运维·nginx
dessler3 小时前
云计算&虚拟化-kvm创建网桥(bridge)
linux·运维·云计算
何曾参静谧3 小时前
「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库
运维·python·自动化
一只哒布刘4 小时前
RHCE-DNS域名解析服务器
运维·服务器
致宏Rex4 小时前
Nginx 负载均衡详解 x Shell 脚本实战
nginx·负载均衡·运维开发
sss-web12264 小时前
4.远程访问及控制
运维·服务器
moneyxjj5 小时前
Linux各种解压命令汇总
linux·运维·服务器
陈yanyu5 小时前
Linux - 弯路系列3:安装和编译libvirt-4.5.0及虚拟网卡virbr0(virbr0-nic)创建
linux·运维·服务器
大风吹PP凉5 小时前
34Web服务器(如Apache, Nginx)
服务器·nginx·apache
tian-ming6 小时前
JavaWeb后端开发知识储备1
java·spring boot·nginx·spring·maven