关闭 nginx 缓冲区下载大文件需设 proxy_buffering off 并确保生效于对应 location,保留 proxy_buffer_size 处理响应头,同步调大 proxy_read_timeout、proxy_send_timeout,启用 http/1.1 连接复用。

针对大文件下载,关闭 Nginx 缓冲区的核心操作是禁用 proxy_buffering,让数据边收边发,彻底避开内存积压、首字节延迟和临时磁盘写入。这不是简单加个 off 就完事,还需配套调整响应头空间、超时与传输行为。
必须关闭 proxy_buffering 并确认生效
在对应 location(如 /download/ 或 /dl/)中明确设置:
-
proxy_buffering off;—— 关键开关,关闭后proxy_buffers、proxy_busy_buffers_size、proxy_max_temp_file_size全部失效 - 确保该指令写在
proxy_pass之前,且未被外层server或http块中的同名配置覆盖 - 验证方式:用
curl -I http://your-domain/big.zip查看响应头是否含Transfer-Encoding: chunked或无Content-Length;同时检查 error.log 不再出现 “buffered to a temporary file” 提示
保留 proxy_buffer_size 专管响应头
即使关闭 buffering,proxy_buffer_size 仍生效,它只存状态行和响应头(如 Content-Type、Set-Cookie、ETag):
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 设为
16k起步,避免因 JWT、多 Header 导致 502 错误 - 不建议盲目放大(如设成 1M),响应头通常几 KB 就够,过大反而浪费固定内存
- 若后端返回超长 header(如调试模式全打日志),应先优化后端,而非堆高 buffer
同步延长超时并启用流式友好协议
关闭缓冲后,Nginx 不再“攒数据”,但弱网或后端慢仍会导致连接中断:
-
proxy_read_timeout 3600;—— 给后端足够时间生成或读取大文件(如导出报表、读取 NAS) -
proxy_send_timeout 3600;—— 防止客户端网络波动(如移动切换基站)触发发送超时 -
proxy_http_version 1.1;+proxy_set_header Connection '';—— 复用连接,避免每 MB 重握手 - 静态文件直传场景可叠加
sendfile on;和tcp_nopush on;,进一步减少内核拷贝
注意 client 端参数不干扰代理缓冲逻辑
以下参数作用于客户端请求阶段,与下载(响应)缓冲无关,勿混淆:
-
client_max_body_size控制上传上限,对下载无效 -
client_body_buffer_size是接收请求体的内存缓冲,不影响响应转发 -
limit_rate属于流量整形,可单独用于限速,但不改变缓冲行为










