nginx 通过 upstream 模块的 keepalive 连接复用和 proxy_next_upstream 错误重试机制,在避免雪崩效应中起到关键作用。具体做法是:配置 upstream 时启用 keepalive 减少频繁建立 tcp 连接的开销,同时设置 proxy_next_upstream 仅在特定错误(如超时、502/503)时重试,并限制重试次数和时间窗口,防止请求堆积导致后端服务进一步崩溃。

keepalive 如何减少连接开销
keepalive 参数允许 Nginx 保持与上游服务器的空闲连接,避免每次请求都新建 TCP 连接,从而降低 CPU 和内存消耗,间接缓解雪崩风险。

upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080;
keepalive 32;
}
server {
location /api {
proxy_pass http://backend;
proxy_next_upstream error timeout http_502 http_503;
proxy_next_upstream_timeout 10s;
proxy_next_upstream_tries 2;
}
}
预期结果:当后端服务器响应缓慢或返回 502/503 时,Nginx 会尝试将请求转发到另一台后端服务器,最多重试 2 次,总耗时不超过 10 秒。若所有后端均不可用,则直接返回错误,不再重试,避免请求无限堆积。
proxy_next_upstream 的重试策略
proxy_next_upstream 控制哪些错误触发重试,合理配置可防止无效重试加剧负载。例如,仅对 timeout 和 5xx 错误重试,忽略客户端错误(4xx),避免重复发送相同失败请求。

基于 proxy_next_upstream_tries=2 的具体行为
当 proxy_next_upstream_tries 设置为 2 时,Nginx 最多尝试两次故障转移。第一次失败后切换到备用服务器,第二次仍失败则终止请求并返回错误。这种有限重试机制有效遏制了请求风暴,防止雪崩效应扩散。











