proxy_send_timeout是Nginx向后端发送请求体时两次写操作间的最大等待时间,仅作用于请求体转发过程,不控制请求头、客户端上传或后端响应超时;默认60秒,需配合client_body_timeout、proxy_read_timeout等协同调优。

proxy_send_timeout 是 Nginx 作为反向代理时,向后端服务器(upstream)发送请求体(request body)过程中,两次连续写操作之间的最大等待时间。它**不控制整个请求发送耗时,只管“写空隙”**——即 Nginx 把数据发给后端时,如果中途卡住、迟迟无法继续发送,超过这个时间就断开连接。
proxy_send_timeout 的作用范围和常见误区
它仅在以下情况生效:
- 客户端上传大文件(如 POST 表单含大附件),Nginx 需要把请求体完整转发给后端;
- 后端处理慢或网络拥塞,导致 Nginx 写数据到 upstream socket 时被阻塞;
- 注意:它不影响请求头发送,也不控制 Nginx 接收客户端请求的超时(那是 client_header_timeout 和 client_body_timeout);
- 更不控制后端响应返回的超时(那是 proxy_read_timeout)。
如何设置 proxy_send_timeout
在 location 或 server 块中配置即可,单位为秒(支持小数):
location /upload/ {
proxy_pass http://backend;
proxy_send_timeout 300; # 允许最多5分钟内完成整个请求体发送
}若未显式设置,Nginx 默认值为 60 秒。对于上传大文件、长轮询或流式接口,建议根据业务场景适当调高。
配合其他超时参数一起调整才有效
单独改 proxy_send_timeout 很可能没效果,因为链路中多个环节都可能中断:
- client_body_timeout:客户端发送请求体给 Nginx 的超时,需 ≥ proxy_send_timeout;
- proxy_read_timeout:Nginx 等待后端响应的超时,通常要更长(尤其对慢接口);
- send_timeout(全局):Nginx 向客户端发送响应时的写超时,与本参数无关但常被混淆;
- 后端服务自身也有读超时(如 Tomcat 的 connectionTimeout)、写超时,需同步检查。
调试与验证方法
遇到上传中断或 504 错误时,可结合日志定位:
- 开启 Nginx error_log 的 debug 级别(谨慎用于测试环境),搜索 "proxy send timeout";
- 用 curl 模拟大文件上传,加 -v 观察连接何时断开;
- 检查后端 access log 是否收到完整请求 —— 若没收到,问题大概率出在 Nginx 到后端这段(proxy_send_timeout 或网络);若收到了但响应慢,则看 proxy_read_timeout。


















