要降低内存压力需关闭 proxy_request_buffering,设为 off 使 nginx 边收边转;配套设置 client_body_buffer_size 0、client_max_body_size 20g、client_body_timeout 和 proxy_read_timeout 各 3600,启用 http/1.1 并透传 range 等头部。

要开启流式上传并显著降低内存压力,核心动作是关闭 proxy_request_buffering,而不是开启它。该指令默认为 on,正是这个“开启”状态导致 Nginx 缓存整个请求体,引发内存暴涨、延迟升高和 413/504 错误。真正起效的配置是设为 off,让 Nginx 变成“边收边转”的透明管道。
为什么必须设为 off 才能降内存
开启(on)时:Nginx 强制等待客户端发完全部数据(比如 5GB 视频),期间将所有字节暂存在内存或刷入磁盘临时文件——内存占用与文件大小线性增长,极易触发 OOM 或磁盘写满。
关闭(off)后:Nginx 收到 TCP 数据包就立即转发给后端,不暂存完整 body。内存占用基本恒定(仅维持连接状态和 TCP 窗口),与文件大小无关。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
关键配套参数必须同步设置
-
显式禁用请求体缓冲区:添加
client_body_buffer_size 0;,防止极小概率路径下仍分配内存缓存 -
放宽上传大小限制:设
client_max_body_size 20G;(或0表示无限制),否则 413 错误会在 buffering 关闭前就拦截请求 -
延长接收超时:设
client_body_timeout 3600;,避免弱网下因短暂停顿被断连 -
匹配后端处理耗时:设
proxy_read_timeout 3600;,防止 Nginx 在后端流式处理时提前终止连接
协议与头部透传不可省略
流式上传依赖 HTTP/1.1 长连接和特定请求头(如 Range、If-Range),Nginx 默认行为可能破坏它们:
- 强制使用 HTTP/1.1:
proxy_http_version 1.1; - 清除 Connection 头:
proxy_set_header Connection '';,防中间设备误关连接 - 透传断点续传头:
proxy_set_header Range $http_range;和proxy_set_header If-Range $http_if_range;
配置应放在具体 location 块内
不要全局设置,只在实际处理上传的路径中启用,例如:
location /api/upload {
proxy_pass http://backend;
proxy_request_buffering off;
client_max_body_size 20G;
client_body_timeout 3600;
proxy_read_timeout 3600;
client_body_buffer_size 0;
proxy_http_version 1.1;
proxy_set_header Connection '';
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
}










