反向代理(Reverse Proxy):
定义:反向代理是位于服务器端的代理服务器,它接收来自客户端的请求,然后将这些请求转发给后端的多个服务器,最终返回给客户端。客户端不直接与后端服务器通信,而是与反向代理服务器通信。
作用:反向代理可以用于隐藏真实的服务器信息,提供负载均衡、缓存加速、安全策略等功能。
配置:在 Nginx 中配置反向代理通常涉及配置一个 server 块,将请求的地址指向后端服务器,并可以通过多种方式进行负载均衡。
负载均衡(Load Balancing):
定义:负载均衡是一种将请求分发到多个服务器上的技术,以平衡服务器的负载,提高系统的性能、可用性和可扩展性。
作用:通过在多个服务器之间分发请求,负载均衡可以避免单点故障,并确保系统在高负载时仍能提供稳定的服务。
算法:Nginx 支持多种负载均衡算法,包括轮询(round-robin)、最小连接数(least connections)、IP 哈希(ip-hash)等。每种算法都有不同的特点,适用于不同的场景。
健康检查:Nginx 可以配置健康检查机制,定期检查后端服务器的健康状态,并根据检查结果调整请求的分发策略。
在 Nginx 中,反向代理和负载均衡通常结合使用,通过反向代理将请求转发给后端的负载均衡器,再由负载均衡器将请求分发给多个后端服务器,从而实现高性能、高可用性的服务架构。
Nginx中常用的6种负载均衡策略
https://mp.weixin.qq.com/s/E4yXg6YFBkXIZwZEPll5bg?poc_token=HMx1EmajMuDkn_ApzFxnqkZrFl_Tze-gaNZeGsBf
1.轮询(Round Robin)
将请求按顺序依次分配给后端服务器,默认的负载均衡策略。
如下图所示:
图片
假设有三台后端服务器:A、B、C。
请求依次按顺序分配给后端服务器:A → B → C → A → B → C → …
配置如下:
http {
upstream backend {
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
2.IP 哈希(IP Hash)
根据客户端的IP地址将请求分配给后端服务器,相同IP的客户端总是被分配到同一台服务器上,有利于保持会话信息。
如下图所示:
配置如下:
http {
upstream backend {
ip_hash;
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
3.最少连接(Least Connections)
将请求分配给当前连接数最少的后端服务器,通过实时监测后端服务器的连接数来决定请求的分配。
如下图所示:
假设有三台后端服务器:A、B、C
当前连接数为:A(5)、B(3)、C(2)
新的请求将被分配给连接数最少的服务器C
配置如下:
http {
upstream backend {
least_conn;
server 192.168.0.1;
server 192.168.0.2;
server 192.168.0.3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
4.加权轮询(Weighted Round Robin)
为每个后端服务器分配一个权重值,根据权重值比例分配请求,权重越高的服务器分配到的请求数量越多。
如下图所示:
假设有三台后端服务器:A(权重2)、B(权重1)、C(权重3)。
请求将按照权重比例分配给后端服务器:A(2次)→ B(1次)→ C(3次)→ A(2次)→ C(3次)→ …
配置如下:
http {
upstream backend {
server 192.168.0.1 weight=2;
server 192.168.0.2 weight=1;
server 192.168.0.3 weight=3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
5.加权最少连接(Weighted Least Connections)
结合了加权和最少连接策略,连接数越少且权重越高的服务器将获得更多的请求。
配置如下:
http {
upstream backend {
least_conn;
server 192.168.0.1 weight=2;
server 192.168.0.2 weight=3;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
6.随机负载均衡策略
随机负载均衡策略,就是每次请求到来时从一组可用的后端服务器中,随机选择一个来处理请求。
实现简单,不需要复杂的算法或状态维护,通常只需要一个随机数生成器即可。
如下图所示:
随机负载均衡策略适用于后端服务器之间性能相近,请求没有特定顺序要求的场景,然而,需要注意的是,随机性会带来的不确定性,可能会导致负载分布不均匀。