核心是分层控制:在http块设proxy_connect_timeout 5s、proxy_send_timeout 30s、proxy_read_timeout 60s等全局默认值,再按路径在location中精准覆盖;同步配置client端超时、健康检查与proxy_next_upstream重试机制。

在网关层统一管理所有反向代理超时参数,核心是把关键 timeout 指令集中写在 http 块顶层,让所有 server 和 location 自动继承,同时保留按路径精细调整的能力。这不是“设一次就完事”,而是分层控制 + 局部覆盖的组合策略。
把三类 proxy 超时设在 http 块顶部
它们分别管不同阶段,必须显式声明,不能依赖默认值:
- proxy_connect_timeout 5s:只控制 TCP 连接建立时间。内网建议 3–5 秒,跨可用区可设 8 秒,避免后端僵死或端口未监听时长时间挂起
- proxy_send_timeout 30s:限制 Nginx 向后端发送完整请求体(如大 JSON 或文件)的总耗时。普通接口够用,上传类路径可单独加长
- proxy_read_timeout 60s:等待后端返回第一个字节的最长时间,504 最常由此触发。登录、查询类接口建议 ≤10s,报表导出等场景再单独延长
客户端侧超时也要同步统一配置
Nginx 不仅要管上游,还得管下游连接空闲问题,否则容易出现假性卡顿:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- client_header_timeout 15s:等客户端发完请求头,防慢速 HTTP 攻击
- client_body_timeout 20s:两次接收请求体数据的间隔,上传大文件时可适当放宽
- send_timeout 30s:Nginx 向客户端发响应时单次写操作超时,避免响应卡在半路
特殊路径用 location 精准覆盖,不破坏全局
全局设好基础值后,只对真实需要的路径做必要延长,避免“一刀切”掩盖问题:
-
/upload/ 下传大文件:增加
proxy_read_timeout 1200;和client_max_body_size 100m; -
/report/export 导出报表:单独设
proxy_read_timeout 300; -
/api/healthz 健康检查:缩短为
proxy_read_timeout 2;,快速失败
别漏掉被动健康检查与重试联动
超时只是发现慢,熔断靠的是自动隔离和重试机制,它也属于“网关层统一能力”:
- upstream 中统一配
max_fails=3 fail_timeout=30s,任一节点连续三次超时或错误即剔除 - 所有 location 都加上
proxy_next_upstream error timeout http_500 http_502 http_503 http_504,触发即换节点 - 配合
keepalive 32和proxy_http_version 1.1,防止高频短连接误判为故障

















