Nginx专题(3) - 反向代理、负载均衡与动静分离

本文最后更新于 2021年4月15日 下午

反向代理 Reverse Proxy

代理与反向代理

代理是client 反向代理则是代理server,对用户clien来说是无感知的

反向代理方式是指用代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络中的上游服务器,并将上游服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外的表现就是一个Web服务器。

反向代理作用

避免直接暴露服务器,保护内网安全

负载均衡

缓存

负载均衡 Load Balance

负载均衡简介

负载均衡作用:

  • 将多个服务器节点绑定在一起提供统一的服务入口。
  • 故障转移,在意外发生的时候,可以增加一层保险,减少损失。
  • 降低上线运维复杂度,实现平滑上线。运维和开发同学都喜欢。

负载均衡就是将请求“均衡”地分配到多台业务节点服务器上。这里的“均衡”是依据实际场景和业务需要而定的。

对于Nginx来说,请求到达Nginx,Nginx作为反向代理服务器,有绝对的决策权,可以按照规则将请求分配给它知道的节点中的一个,通过这种分配,使得所有节点需要处理的请求量处于相对平均的状态,从而实现负载均衡。

负载均衡策略

Nginx支持多种负载均衡策略,这里列举几种

第一类 最佳实现

最佳实践,其实就是最常见、最普通的默认配置,当然也是在一定程度上最好用的配置。不知道用什么方式的时候,就可以选择用这一类型。

Round Robin 轮询

默认策略。默认每台服务器权重相同。

Random 随机

每个请求将被传递到随机选择的服务器。如果指定了两个参数,首先Nginx根据服务器权重随机选择两个服务器,然后使用指定方法选择其中一个。

第二类 性能优先

让业务节点中性能更强的机器得到更多请求,这也是一个比较好的分配策略。

什么是性能更好的机器?这个问题也有很多的维度去考量。

  • 从经验或硬件上分为高权重、低权重的机器。
  • 按照节点请求的响应时长来决定是多分配请求,还是少分配请求。
  • 按照保持的连接数。一般来说保持的连接数越多说明处理的任务越多,也是最繁忙的,可以将请求分配给其他机器处理。
权重轮询

在轮询的基础上引入权重,未指定权重的服务器权重默认为1,权重越高的服务器被分配到的概率越大。

Least Connections 最少连接数

以最少的活动连接数将请求发送到服务器。也同样可以考虑服务器权重。

fair 按响应时长

第三方策略。按后端服务器的响应时间来分配请求,响应时间短的优先分配。

Least Time

对于每个请求,NGINX Plus选择具有最低平均延迟和最低活动连接数的服务器。Nginx Plus独有。

第三类 保持稳定

很多请求都是有状态的,上一次请求到哪个业务节点,这次还要请求到哪台机器。比如常见的session就是这样一种有状态的业务。

这里Nginx提供了按照客户端ip的hash来作为用户的标示分配、url的hash作为分配标示的规则。本质上还是要找到用户的请求中不变的要素,抽离出来,这样就可以进行分配了。

ip_hash

对每个请求按访问的ip的hash结果分配,这样每个访客会固定访问一个后端服务器

url_hash

按照访问的URL 的 hash 结果分配请求,每个请求的 URL 会指向后端固定的某个服务器,可以在 Nginx 作为静态服务器的情况下提高缓存效率。

一致性哈希进行分配

故障节点摘除与恢复

动静分离

Nginx还有一个重要的作用那就是动静分离,把网页资源中的静态部分和需要访问专门服务器获取的动态部分分离

作为静态文件的缓存服务器,提高访问速度

未完待续……

参考文档

Nginx专题(1):Nginx之反向代理及配置-周恒

Nginx专题(2):Nginx的负载均衡策略及其配置-周恒

当面试官问我Nginx如何实现负载均衡,我这么答让他眼前一亮 - 麦冬


Nginx专题(3) - 反向代理、负载均衡与动静分离
https://muzing.top/posts/251746f5/
作者
muzing
发布于
2021年4月8日
更新于
2021年4月15日
许可协议