proxy_send_timeout 是 Nginx 向后端发送请求体时两次写操作间的最大等待时间,适用于 POST/PUT 等带请求体的场景,单位秒,默认60秒,需在 location 或 server 块中配置。

proxy_send_timeout 是 Nginx 作为反向代理时,控制它向后端服务器(如上游应用服务)发送请求数据的超时时间。注意:它不是等待后端响应的时间(那是 proxy_read_timeout),而是指 Nginx 在向后端“发数据”过程中,两次写操作之间的最大等待时间。
作用范围与触发场景
该指令生效于 Nginx 向 upstream 发送请求体(request body)的过程,常见于 POST、PUT 等带请求体的请求。例如用户上传大文件、提交长表单,Nginx 需要将数据分块转发给后端。若后端处理缓慢或网络卡顿,导致 Nginx 某次 write() 调用后迟迟无法继续发送下一段数据,超过 proxy_send_timeout 就会断开连接。
- 只影响「Nginx → 后端」的数据发送阶段,不影响客户端到 Nginx 的上传
- 默认值为 60 秒,单位是秒(支持小数,如
30.5) - 必须在
location或server块中配置,不能在http全局块直接生效(除非嵌套在 proxy 相关上下文中)
典型配置方式
在启用 proxy_pass 的 location 块中设置:
⚠️ 已弃用 — 该技能已拆分为两个独立技能,以提升模块化程度:**webchat-https-proxy**(HTTPS/WSS 反向代理)和 **webchat-voi...**
location /api/ {
proxy_pass http://backend;
proxy_send_timeout 90;
proxy_read_timeout 120;
proxy_connect_timeout 10;
}
- 上面例子将发送超时设为 90 秒,适合需要较长时间上传请求体的接口(如文件上传 API)
- 建议配合
proxy_read_timeout一起调整,避免发送刚完成就因读响应超时而中断 - 若后端是慢速流式写入(如生成大报表再返回),应重点调高
proxy_read_timeout,而非proxy_send_timeout
和 client_max_body_size、client_body_timeout 的区别
容易混淆的几个超时参数:
-
client_max_body_size:限制客户端请求体大小,超出则返回 413 -
client_body_timeout:控制客户端上传请求体时,两次接收数据包之间的超时(Nginx 等待客户端发数据) -
proxy_send_timeout:控制 Nginx 自己发数据给后端时的写超时 -
proxy_read_timeout:控制 Nginx 等待后端响应数据的超时
简单记:client\_xxx 是管「客户端→Nginx」,proxy\_xxx 是管「Nginx→后端」;send 是发,read 是收。
调试与验证方法
确认是否生效可结合日志与模拟测试:
- 开启 Nginx error_log 的 info 级别,超时时通常记录类似
upstream timed out (110: Connection timed out) while sending request to upstream - 用 Python/Node.js 写一个故意延迟写响应体的后端,观察 Nginx 是否在指定时间后断连
- 注意 Linux 内核 TCP 层的 keepalive 和 timeout 可能覆盖或干扰 Nginx 行为,生产环境需一并检查

















