proxy_send_timeout控制Nginx向后端发送请求体时两次写操作间的最大空闲等待时间,非总耗时;默认60秒,仅作用于body传输阶段,不控制建连、响应等待或客户端上传。

proxy_send_timeout 并不控制“请求发送超时时间”,它控制的是 Nginx 向上游服务器(如后端应用)**发送请求体(request body)过程中,两次写操作之间的最大等待时间**。
很多人误以为它是整个请求发出去的总耗时限制,其实不是。它只管“发的过程中卡住多久算超时”,而不是“从开始发到发完总共能花多久”。
proxy_send_timeout 的真实作用
当 Nginx 作为反向代理,把客户端请求转发给后端(比如用 proxy_pass)时:
- 如果后端正在接收请求体(例如上传大文件、POST 大数据),而 Nginx 在向后端 socket 写数据时,连续 超过 proxy_send_timeout 秒没写成功一次,Nginx 就会断开与后端的连接;
- 这个超时是“空闲写超时”,不是总耗时。哪怕总共写了 10 分钟,只要每次 write 间隔都小于该值,就不会触发;
- 它只影响 请求体发送阶段(即 POST/PUT 等带 body 的请求),对请求头发送或响应接收无影响;
- 默认值通常是 60 秒,单位是秒(支持小数,如 30.5)。
和相关指令的区别
别把它和这几个常见指令混淆:
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
- proxy_connect_timeout:Nginx 连接上游服务器的 TCP 握手超时;
- proxy_read_timeout:Nginx 从上游读响应时,两次 read 操作间的空闲等待时间;
- client_header_timeout / client_body_timeout:控制客户端发请求头/请求体时的空闲超时(Nginx 等待客户端的时间);
- send_timeout:Nginx 向客户端发送响应时的空闲写超时(非 upstream 相关)。
怎么合理设置 proxy_send_timeout
主要看后端是否容易在接收请求体时出现慢速写入(如磁盘 I/O 延迟、后端解析慢、限流等):
- 普通 API 接口(JSON 小数据):保持默认 60 秒足够;
- 文件上传服务(尤其大文件 + 弱网):可适当调大,比如 300(5 分钟),避免因网络抖动中断上传;
- 后端明确要求快速接收(如某些实时协议):可设小一点,如 10,加快失败感知;
- 不要设为 0(不限制)——可能让坏连接长期占用 worker 进程资源。
配置示例
放在 location 或 server 块中:
location /upload/ {
proxy_pass http://backend;
proxy_send_timeout 300;
proxy_read_timeout 300;
client_max_body_size 2g;
}
注意:它必须配合 proxy_pass 使用,单独出现在其他上下文(如 http 块顶层)无效。

















