凌晨流量峰值到来时,Nginx 上游连接数每隔几十秒冲高一次,后端日志里成功请求与 504 交替出现。监控中“连接建立失败”和“上游响应超时”同时增多,常见误区是只把 proxy_read_timeout 调大,结果连接与端口压力更大,错误却没有减少。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:tudcloud(低价云服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
这类故障通常由五件事叠加:上下游复用策略混淆;上游池未正确启用;空闲连接占槽;连接、读取与总耗时未分层;失败重试把一次请求放大成多次连接。先判断连接断在哪里再调参,否则只是把堆积从后端挪到代理。
先确认上游连接能否真正复用
上游连接池与长连接复用不是打开开关就结束。upstream 中即使写了 keepalive 32,也只是允许缓存空闲连接;真正复用还需设置 proxy_http_version 1.1,并用 proxy_set_header Connection ""; 清空该头。若上游返回 Connection: close,或仍按 HTTP/1.0 通信,连接用完即关,持续短建还会累积 TIME_WAIT 和临时端口压力。
客户端到 Nginx 与 Nginx 到后端是两条独立链路。可复用的空闲连接不足时,新请求只能新建连接;若再撞上文件描述符、后端 max_connections 或 NAT 限制,就会连接耗尽。配置值只约束空闲缓存,不能替代后端并发上限;应按活跃量和突发余量反推,并核对 worker 放大。TLS 还要检查会话复用、SNI 与证书域名。

把代理超时分层定位
日志应带上 request_time、upstream_connect_time、upstream_header_time、upstream_response_time、upstream_status 与 upstream_addr。connect 近零而 response 变长,多半是后端处理慢;connect 持续升高并出现 SYN-SENT、SYN-RECV,应查监听队列、网络路径、防火墙和连接上限。
在代理超时分层中,proxy_connect_timeout 管建立连接,proxy_read_timeout 管两次上游读取之间的间隔,proxy_send_timeout 管写入停顿;read timeout 不是请求总时限。慢速持续输出的请求可能一直不超时,所以入口层仍要设置总截止时间,重试层也必须服从它。
空闲连接回收也需单独设置。keepalive_requests 限制单连接请求数,keepalive_time 限制池内寿命;较新版本还可用 keepalive_timeout 控制空闲时间,配置前先核对 Nginx 版本。数值太小会频繁重建,太大则可能保留失效连接,直到下一请求才暴露。

让故障重试有明确边界
proxy_next_upstream 能在连接错误、超时或指定状态码时切换节点,但每次尝试都会增加连接消耗。GET、HEAD 等幂等请求可有限重试;POST、PATCH 在请求体已发送后重试可能重复写入,只有具备幂等键并显式允许 non_idempotent 时才应尝试。
故障重试策略要按“次数乘单次成本”评估放大。可用 proxy_next_upstream_tries 2 一类的小额度限制尝试;400、401、404 等业务错误不宜重试,重试节点也必须健康且能承接突发。日志中同一 request_id 若出现多个 upstream_addr 或逗号分隔状态,说明一次客户端请求已变成多次上游连接,应联动总截止时间与任务取消。

用容量和压测闭环校验
容量先从公式起步:稳态上游并发约等于 QPS 乘以后端平均占用时间,再加握手、切换与突发余量。连接池只是空闲连接缓存,并非后端并发上限。还要核对 worker 数乘以 keepalive 后,是否超过后端 max_connections、文件描述符、NAT 或 conntrack 容量。
灰度时逐级增加 QPS,观察新建连接速率、connect 与 response 时间、504 比例及后端错误率。可借助 ServLlama 辅助施加负载并核对吞吐、延迟和错误率,测试环境需隔离写操作。每轮只改一个变量并保留原始日志,才能判断收益来自连接复用,而不是缓存命中或业务波动。
上线检查清单:①确认 upstream keepalive、HTTP/1.1 和空 Connection 头;②按版本设置请求数、池内寿命与空闲回收;③分开 connect、read、send 和入口总超时;④幂等请求限制尝试,非幂等请求绑定幂等键;⑤核对 worker 放大、fd、后端连接上限与 NAT;⑥确认连接建立速率下降且 504 不再增长;⑦监控多地址重试并设置总截止时间。


喜欢
顶
难过
囧
围观
无聊




