需设置三类代理超时:proxy_connect_timeout(3~5秒)、proxy_send_timeout(10秒)、proxy_read_timeout(略高于业务耗时);启用error timeout及必要HTTP错误重试;配置max_fails与fail_timeout实现健康检查;强制HTTP/1.1、复用连接;避免proxy_pass用localhost。

明确设置三类代理超时时间
后端响应慢时,Nginx 默认会等满 60 秒才返回错误,用户看到的是长时间白屏。必须主动限制每个环节的等待上限:
- proxy_connect_timeout:控制与后端建立 TCP 连接的时间,内网建议设为 3~5 秒,避免卡在握手阶段
- proxy_send_timeout:限制向后端发完全部请求数据的时间,一般 10 秒足够,防止大请求体阻塞
- proxy_read_timeout:等待后端返回响应头的时间,应略高于业务正常耗时,比如接口通常 2 秒返回,这里可设为 3 秒
启用精准失败重试机制
光设超时还不够,Nginx 需知道“哪些失败值得换节点重试”:
- 必须包含 error timeout:覆盖连接失败、发送中断、读取超时等底层异常
- 按需加入 http_502 http_504 http_500:后端明确返回网关错误或超时错误时也触发重试
- 避免加 http_404 http_403:这类是业务逻辑结果,重试无意义,还可能放大问题
配合健康检查自动剔除慢节点
如果某台后端持续响应慢,Nginx 可能反复选中它,造成多次超时。用 max_fails 和 fail_timeout 让它临时下线:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- 例如:server 10.0.0.7:80 max_fails=2 fail_timeout=15s
- 含义:15 秒内连续失败 2 次(超时或 error),该节点即被标记为不可用
- 15 秒后自动恢复探测,既不永久剔除,也不反复试探
强制使用 HTTP/1.1 并复用连接
很多卡顿实际源于协议降级和频繁建连:
- 务必添加 proxy_http_version 1.1;,否则默认走 HTTP/1.0,每次都要新建连接
- 搭配 proxy_set_header Connection '';,让 Nginx 接管长连接管理
- 在 upstream 块中配置 keepalive 32;,复用空闲连接,降低后端压力
避免 localhost 解析引入隐式延迟
proxy_pass 后面写 localhost 是高危操作:
- 系统若未在 hosts 中显式映射 localhost → 127.0.0.1,Nginx 会先尝试 IPv6 的 ::1,失败后再回退到 IPv4,中间有明显超时等待
- 直接写 127.0.0.1 或具体域名,彻底绕过 DNS 和地址解析环节
- 如必须用域名,应在配置中显式声明 resolver 8.8.8.8 valid=30s; 缓存解析结果

















