send_timeout控制Nginx向客户端发送响应时两次写操作间的最大空闲等待时间,不控制整个响应传输总时长、后端处理慢或客户端上传慢;默认60秒,大文件下载可设300–600秒,弱网环境可设120–180秒,需配合proxy_read_timeout等协同配置。

send_timeout 控制的是 Nginx 向客户端发送响应时,两次写操作之间的最大等待时间,不是整个响应传输的总时长。
它管什么、不管什么
这个参数只在“发送响应过程中卡住”时起作用:比如 Nginx 已准备好数据要发给浏览器,但客户端网络慢、接收缓冲区满、或中间有代理/防火墙吞吐不稳,导致连续一段时间没确认收包——Nginx 就会等够 send_timeout 设定的时间,然后断开连接。
它不管以下情况:
- 后端处理慢(那是 proxy_read_timeout 的事)
- 客户端上传慢(那是 client_body_timeout)
- 整个响应从头到尾花了多久(它只盯“两次写之间”的空档)
怎么设置才合理
默认是 60 秒,对大多数网页和 API 足够。但遇到这些场景建议调大:
- 大文件下载(如导出 Excel、视频流)→ 设为 300~600 秒
- 客户端网络质量差(如弱网移动设备)→ 可设 120~180 秒
- 响应体本身很大且传输节奏不稳(比如含大量 Base64 图片的 JSON)→ 建议不低于预估传输时间 + 30 秒余量
注意:不要盲目设成 0(禁用超时),否则可能让僵死连接长期占用 worker 进程资源。
配置位置与写法
支持在 http、server 或 location 块中设置,越靠下优先级越高:
location /download/ {
send_timeout 600s;
proxy_pass http://backend;
}
单位可写 s(秒)、m(分钟),例如 send_timeout 10m; 等价于 600 秒。
别忘了配合其他超时项
单独改 send_timeout 效果有限,尤其在反向代理场景下,还需同步检查:
- proxy_read_timeout:确保它 ≥ send_timeout,否则后端还没返回,Nginx 就先断连了
- keepalive_timeout:若启用了长连接,它的值不宜远大于 send_timeout,避免连接空闲太久还挂着
- client_max_body_size 和 client_body_timeout:如果响应大是因请求也大(如上传后返回结果),这两项也要放宽
不复杂但容易忽略。


















