proxy_send_timeout控制nginx向后端发送请求体时两次写操作间的空闲超时,不控制整体上传耗时或响应阶段;需按网络环境设5–120秒,禁用proxy_buffering后生效,并须协同proxy_http_version 1.1、client_body_timeout等配置。

proxy_send_timeout 控制的是 Nginx 作为代理向后端服务器发送请求体(request body)时,两次写操作之间的超时时间,不是整个上传耗时的上限,也不影响响应返回阶段。它只在 Nginx 主动向后端发数据(比如客户端 POST 大文件、流式请求体)且后端接收缓慢或网络卡顿时起作用。
理解 proxy_send_timeout 的真实作用范围
该指令仅适用于以下场景:
- 客户端通过 POST/PUT 等方法提交大量数据(如文件上传、JSON 批量导入)
- Nginx 开启了 proxy_buffering off 或使用 proxy_request_buffering off(禁用请求体缓存)
- 后端服务读取慢、TCP 接收窗口小、或中间链路存在高延迟/丢包
- 注意:如果启用默认的 proxy_buffering(on),Nginx 会先收全请求体再发给后端,此时该 timeout 不生效
合理设置值:别盲目调大,要匹配业务特征
设得太小容易中断大上传;设得太大可能让异常连接长期占着 worker 进程。推荐按实际网络和后端处理能力设定:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 局域网内稳定后端:5–15 秒足够(默认 60 秒偏保守)
- 公网或跨云后端:建议 30–60 秒,配合 TCP keepalive 和后端 read timeout 对齐
- 流式上传(如视频分片、日志推送):可设为 120 秒,但必须搭配 proxy_buffering off 和 proxy_http_version 1.1
- 绝对不要设为 0(不限时)——会阻塞 worker,引发连接堆积
必须协同配置的关键项
单独调 proxy_send_timeout 效果有限,需配套调整:
- proxy_buffering off:确保 Nginx 不缓存请求体,实现边收边发
- proxy_http_version 1.1:避免 HTTP/1.0 的连接关闭问题,支持持久连接
- proxy_set_header Connection '':清除 Connection: close,防止后端误关连接
- client_body_timeout:控制客户端发请求体的间隔,应 ≥ proxy_send_timeout
- proxy_read_timeout:后端响应阶段的超时,通常也需同步延长(尤其后端计算密集)
典型高效上传配置示例
适用于 100MB+ 文件直传后端(如对象存储网关、AI 推理 API):
location /upload {
proxy_pass https://backend;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_send_timeout 90;
client_body_timeout 90;
proxy_read_timeout 300;
proxy_set_header Connection '';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
该配置让 Nginx 以流式方式将客户端数据实时转发,同时避免因单次 write 阻塞过久而断连。










