proxy_read_timeout 是控制 Nginx 收到响应头后等待下一段响应体的最大空闲时长,需按接口类型分路径配置、协同调整关联超时、启用 upstream keepalive 并匹配后端超时,流式响应还需关闭缓冲并开启分块传输。

proxy_read_timeout 不是“延长等待总时间”的开关,而是精准控制 Nginx 在收到响应头后,等待后端发送下一段响应体数据的**最大空闲时长**。设小了会误报 504;设大了会让僵死连接堆积,拖垮 worker 进程。真正有效的配置,靠的是分路径、看实测、配协同。
按接口类型在 location 块里单独设值
后端既有秒级 API,又有分钟级导出任务?绝不能全局统一设成 60 或 300。必须用 location 隔离慢路径:
-
普通接口(如
/api/user):P99 耗时约 1.8 秒 → 设proxy_read_timeout 10 -
报表导出(如
/api/export):监控显示 P99 空闲间隔为 242 秒 → 设proxy_read_timeout 300(×1.25) -
流式日志或 SSE 接口:后端每 30 秒发一次心跳 → 设
proxy_read_timeout 90(略大于两倍心跳间隔)
同步调齐三项关键关联超时
只改 proxy_read_timeout 就像修门锁却忘了关窗——其他环节照样断连:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
-
proxy_send_timeout≥ 你设的proxy_read_timeout:确保大请求体(如带附件的 POST)能完整发出 -
send_timeout≥proxy_read_timeout:防止弱网用户下载导出文件时,Nginx 提前关闭客户端连接 -
proxy_connect_timeout要小(建议 3–10 秒):避免建连失败时卡住整个请求流程
启用 upstream keepalive 并匹配后端超时
没开启连接复用,再准的 timeout 也白搭:
- upstream 块中加
keepalive 32; - 对应 location 中加
proxy_http_version 1.1;和proxy_set_header Connection ''; - 后端超时(如 Tomcat 的
connectionTimeout)必须比 Nginx 小,建议设为proxy_read_timeout × 0.8左右(例如 Nginx 设 300,后端设 240)
流式响应要关缓冲、开分块
对导出 Excel、实时日志这类接口,Nginx 默认缓存整块响应,会导致“看起来卡住”:
- 加
proxy_buffering off;:让响应边收边转,不攒着等全量 - 加
chunked_transfer_encoding on;:支持分块传输,提升兼容性 - 注意:
proxy_read_timeout此时管的是两次 chunk 之间的静默间隔,不是整个会话时长

















