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

一、nginx的两种代理方式

1、七层代理(http协议)

2、四层代理(tcp/udp流量转发)

二、四层代理和七层代理

(一)四层代理:基于tcp/udp协议的ip和端口转发数据包

1、四层代理无法获取http请求中的url信息,只能对tcp/udp的数据包进行转发,对请求没有任何操作和处理

(二)七层代理:代理的是http的请求和响应

1、客户端请求代理服务器,由代理服务器转达客户端的http请求,转发到后端的服务器(可以是单台、或一组)

2、后端的web server再把响应送到代理服务器,最后再到客户

(三)四层代理和七层代理的区别 (重点)

1、七层代理

(1)七层代理走的是用户态,需要对http的请求进行处理和解析,解析过程中,可以根据请求头和请求体的内容进行流量控制、内容过滤

(2)****七层代理转发速度比较慢,但是提供的功能更高级,****用户的体验更好

(3)七层代理可以对IP和端口 进行转发,也可以对域名进行代理

2、四层代理

(1)四层代理走的是内核,是基于IP和端口号,只负责将流量(IP和端口)转发到后端服务器,不对请求做任何处理,只是负责转发

(2)四层代理速度较快,但无法提供更高级的功能,只是转发

(3)四层代理只能对IP和端口进行转发

3、选择场景

(1)需要对http请求进行控制和处理,只能选择七层代理(最常见的代理方式)

(2)只需要转发tcp/udp数据包(流量),可以选择四层代理,也可以选择七层代理

4、模块

(1)七层代理的模块:只能写在http模块的全局配置中(upstream)

①upstream:用于处理http请求,支持反向代理、负载均衡,缓存功能

②在upstream模块中可以配置多个服务器

(2)四层代理的模块:只能写在全局模块当中的单独配置(stream)

①stream代理是无谓协议,只管流量

(四)四层代理和七层代理的配置

1、四层代理的配置:只能写在全局配置当中(stream)

stream {

upstream test{

server 20.0.0.12;

server 20.0.0.14;

#默认轮询

#加权轮询

#最小连接数

}

server {

listen 80;

proxy_pass http://test

}

}

2、七层代理的配置

(1)正向代理

location {

proxy_pass http://20.0.0.12;

}

(2)反向代理

①在http的全局配置中定义upstream模块、负载均衡的算法配置在upstream模块中

upstream yyy {

least_conn;

ip_hash;

url_hash;

server 20.0.0.12 weight;

server 20.0.0.13 weight;

}

②在server块的location中,指定代理服务器的方法

location {

proxy_pass http://yyy

}

三、正向代理和反向代理

(一)正向代理

1、都是通过代理服务器访问,明确指向后端服务器,一般都是一对一

2、客户端也是访问代理服务器,代理服务器转发请求,客户端只代理服务器的地址,而后端的web server的IP地址客户端也不知道

(二)反向代理

1、代理服务器转发http请求,但是客户端不知道访问的是哪一台服务器

2、都是通过代理服务器访问,一个代理服务器 会有多台后端服务器供代理服务器进行转发请求,一对多

3、只有一对多才涉及负载均衡的算法问题

(三)正向代理的配置方法(类似vpn、加速器)

nginx1作为客户端、nginx2和nginx3作为代理服务器

通过20.0.0.11直接访问20.0.0.12

(四)反向代理的配置:客户端通过代理服务器访问,但后端有多台(企业架构都是反向代理)

四、负载均衡算法

(一)rr(round robin):轮询(负载均衡最简单的算法)

1、含义:请求轮流分配到后端服务器,是默认算法,可以不加

2、特点:默认算法,每发起一次都是新的请求,在服务器上没有缓存

3、适用场景:服务器处理能力相近,而且对访问量比较小的网站适用

(二)加权轮询:weight(建立在默认轮询算法之上)

1、含义:为后端服务器设置不同的权重,通过权重分发客户端的请求

2、特点:

(1)处理能力强的服务器可以分配的权重值要高一些

(2)轮询次数基本上按照权重进行分配,服务器上也没有缓存

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

3、适用场景:中大型网站可以使用加权轮询

(三)最小连接数算法:会把请求发送到连接数量较小的后端服务器(least_conn)

1、特点:

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

2、适用场景:中型网站、大型网站,日常访问可以满足

(四)ip_hash

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

2、特点:

(1)ip_hash第一次访问之后,后续的访问是有缓存的

(2)如果后端服务器的数量发生变化,可能会进行重新分配,请求的后端服务器可能会发生变化(后端服务器数量变少一定会变化;后端服务器的数量增加,请求的地址未必发生变化)

(3)缩容的情况:业务量比较少,不需要那么多后端服务器,才会缩容,一般只会扩不会缩

3、适用场景:ip_hash适用于高并发,请求不会跳转,请求的是缓存(用于:把请求的客户端地址,转发到固定的服务器)

(五)url_hash:

1、含义:根据请求的url地址计算hash值,然后将请求发送到相应的后端服务器。相同的url地址请求会被分配到相同的服务器

2、特点:

(1)url_hash访问之后,后续都是访问缓存,可以降低后端服务器的压力

(2)url地址发生变化,或者后端服务器数量也发生变化,可能会变更后端服务器的地址

3、适用场景:url_hash和ip_hash可以结合在一起使用,可以适用于并发较高的场景

五、基于域名的反向代理

nginx1作为客户端、nginx2和nginx3作为代理服务器

(一)客户端配置

(二)代理服务器配置

六、配置四层的反向代理(全局模块中配置;基于ip和端口)

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

1、四层代理中可以使用加权轮询、最小连接数算法实现负载均衡

2、但是ip_hash和url_hash这两种算法不可以在stream中使用,只有http协议可以请求和处理,四层不能对请求进行任何处理,只是转发数据包。因此、只有http七层代理可以处理请求地址和请求的url

相关推荐
筱小虾米1 小时前
解决SSL VPN客户端一直提示无法连接服务器的问题
运维·服务器
dntktop3 小时前
内嵌编辑器+AI助手,Wave Terminal打造终端新体验
运维
kaiyuanheshang5 小时前
docker 中的entrypoint和cmd指令
运维·docker·容器·cmd·entrypoint
wanhengwangluo5 小时前
裸金属服务器能够帮助企业解决哪些问题?
运维·服务器
Python私教6 小时前
除了 Docker,还有哪些类似的容器技术?
运维·docker·容器
titxixYY6 小时前
SElinux
linux·运维·服务器
聚名网7 小时前
手机无法连接服务器1302什么意思?
运维·服务器·智能手机
先天打工圣体的男人9 小时前
Linux中安装InfluxDB
linux·运维·服务器
dessler9 小时前
云计算&虚拟化-kvm-克隆(clone)虚拟机
linux·运维·云计算
陌小呆^O^10 小时前
CmakeList.txt之Linux-pthread
linux·运维·服务器