nginx代理超时需分三类配置:客户端阶段用client_header_timeout、client_body_timeout、send_timeout;后端连接阶段用proxy_connect_timeout;数据传输阶段用proxy_read_timeout和proxy_send_timeout;误配易致408/502/504错误。

配置 Nginx 代理后端服务器的超时处理,核心是区分三类超时场景:客户端连接阶段、Nginx 与后端建立连接阶段、以及数据收发阶段。不同阶段对应不同参数,设错容易导致 408、502、504 等错误,不能一概而用默认值。
客户端请求超时控制
这类超时影响的是用户发起请求时的行为,和后端无关,但会间接影响代理链路是否能走到后端。
- client_header_timeout:等待客户端发送完整请求头的最长时间,默认 60 秒。若用户网络卡顿或客户端异常,超过该时间未发完 Host、User-Agent 等头部,Nginx 直接返回 408 Request Timeout
- client_body_timeout:两次读取请求体之间的最大间隔(不是整个上传耗时),默认也是 60 秒。适用于文件上传场景,防止连接长期空占
- send_timeout:Nginx 向客户端发送响应时,两次写操作之间的最大间隔。例如大文件下载中客户端接收慢,超时则断开连接
Nginx 与后端建立连接的超时
这是代理链路的第一道“握手关”,直接影响能否成功把请求转发出去。
- proxy_connect_timeout:仅控制 TCP 连接建立阶段(三次握手完成)的等待时间,默认 60 秒。若后端进程崩溃、防火墙拦截、或端口未监听,就会在此阶段失败
- 常见合理值:内网环境可设为 1–3s;跨公网或高延迟链路建议 5–10s;设太短易误判后端不可用,太长则用户等待感明显
- 超时后返回 502 Bad Gateway,日志中通常含
upstream timed out (110: Connection timed out)
代理过程中的数据传输超时
连接已建好,但后端响应慢或网络抖动,需靠这两个参数兜底。
- proxy_read_timeout:从后端读取响应数据的超时时间,即等待后端返回完整响应的总时长(含首字节和后续数据)。默认不设限,生产环境务必显式设置,如 30–120s,取决于业务类型(API 接口可短些,报表导出可长些)
- proxy_send_timeout:Nginx 向后端发送完整请求(包括 header + body)的超时时间。对大文件上传、含大 payload 的 POST 请求尤其关键,建议设为 30–60s
- 这两项超时触发时,Nginx 关闭与后端的连接,并向客户端返回 504 Gateway Timeout
额外注意事项
这些细节常被忽略,但直接影响稳定性与可观测性:
- HTTP 代理中不用
proxy_timeout(那是stream模块专用),混淆会导致配置无效 - HTTPS 后端代理(
proxy_pass https://...)时,SSL 握手也计入proxy_connect_timeout,建议比 HTTP 场景略放宽 - 搭配
proxy_next_upstream error timeout http_502 http_504可在超时后自动尝试其他上游节点(需配合 upstream 块) - 所有超时单位支持
s(秒)、ms(毫秒),如proxy_read_timeout 45000ms











