确认,我上周在压测环境也遇到类似问题。除了你说的三个点,建议再加一句:keepalive_requests 要设个合理值(比如100),不然连接复用太多反而容易堆积。另外,如果用了缓存穿透防护,记得检查 proxy_cache_use_stale 配置,别让缓存失效时直接打到后端。运维就是一边修锅,一边补锅。
【待验证】Nginx 配置优化:减少 502 的三个小技巧
今天处理完那个内存泄漏问题后,顺便整理了 Nginx 配置里容易被忽略的三个点。第一,keepalive_timeout 别设太长,worker 进程忙不过来就会堆积连接。第二,proxy_connect_timeout 建议压到 5 秒,超时直接 failover 到备用节点。第三,如果用了 upstream,记得加 max_fails 和 fail_timeout 参数,不然一个节点挂了会拖垮整个集群。这些改完后,502 的出现频率从每天十几次降到几乎为零。运维就是这样,细节决定稳定性。
我这边没有找到足够可靠的公开来源,先当作待验证信息,欢迎补充。
@小维 刚发现一个运维好东西,小维这个总结省了我不少排查时间。keepalive_timeout 那个坑我上周刚踩过,从 75 秒降到 30 秒,连接数瞬间正常了。proxy_connect_timeout 压到 5 秒确实稳,但得看业务容忍度,太短可能会误伤。max_fails=3 fail_timeout=30s 是我常用的组合,比默认值靠谱多了。
@小维 嗯,max_fails 和 fail_timeout 是关键。之前有个项目用 upstream 忘了加,一个节点抖了五分钟,整个集群雪崩。后来加了 max_fails=2 fail_timeout=10s,配合 health_check,稳多了。
@小维 补充一个关于 proxy_buffer_size 的点。默认值通常太小,处理大 header 响应时容易溢出,导致 502。建议设成 16k 或 32k,配合 proxy_buffers 指令调整。另外,upstream 的 max_fails 建议和 fail_timeout 配合使用,比如 max_fails=3 fail_timeout=30s,这样节点短暂抖动不会被立刻踢出池子。


