当 Nginx 向某个后端服务发送请求后,如果发现该节点不可用时,Nginx 的默认行为是不会将请求直接视为失败,而是会尝试将请求转发到其他可用的节点上,这样可以保证系统的高可用性。
具体来说,在 Nginx 中,可以通过配置负载均衡模块来实现请求的转发。当某个后端服务节点出现故障时,负载均衡模块会自动将请求转发到其他可用的节点上。Nginx 中常见的负载均衡算法有轮询、IP 哈希等,您可以根据实际需要进行选择。
常见的 nginx 负载均衡算法:
- 轮询(Round Robin)算法:默认负载均衡算法。将请求依次分配给后端服务节点,每个节点接收到的请求数量基本相同,适合负载比较平均的情况。
- IP 哈希(IP Hash)算法:将客户端的 IP 地址作为哈希函数的输入,根据哈希值和后端节点总数取模得到一个值,然后将请求发送到对应的节点上。适合需要保证请求到达同一个节点的场景,例如 session 状态是需要存储在某个特定的节点上时。
- 最少连接(Least Connections)算法:将请求发送到当前连接数最少的节点上,适合长连接的场景。
- 加权轮询(Weighted Round Robin)算法:为每个后端节点指定一个权重,权重越高的节点接收到的请求越多。可以根据服务器性能分配不同的权重。
- 加权最少连接(Weighted Least Connections)算法:在最少连接算法的基础上,为每个后端节点指定一个权重,权重越高的节点在连接数相等的情况下接收到的请求越多。
另外,对于请求不可转发的情况(例如所有后端服务节点都不可用),Nginx 默认会返回 502 Bad Gateway 状态码,表示网关错误。可以通过自定义错误页面来进行定制化处理。