proxy_pass 不直接配置响应缓冲区,缓冲由 proxy_buffering、proxy_buffers 等独立指令控制;默认启用以避免阻塞 worker 进程,需显式配置开关、大小及刷新策略。

proxy_pass 本身不直接配置响应缓冲区,缓冲行为由一组独立的 proxy_* 缓冲指令控制。Nginx 默认启用响应缓冲,目的是避免后端慢、网络抖动或客户端接收慢时阻塞 worker 进程。是否开启、缓存多大、何时刷新,都需要显式配置。
响应缓冲的核心控制指令
以下指令必须放在 location 或 server 块中,与 proxy_pass 同级使用:
-
proxy_buffering on/off:总开关。设为
off时禁用缓冲,响应边收边传(适合流式接口、大文件下载或实时日志推送);默认为on。 -
proxy_buffers N SIZE:设置主缓冲区数量和单个大小。例如
proxy_buffers 8 4k表示最多用 8 个 4KB 缓冲区暂存响应体,超出部分写入临时文件。 -
proxy_buffer_size SIZE:专用于缓存响应头(status line + headers),通常设为
4k或8k即可,不能小于proxy_buffers中的单个 SIZE。 -
proxy_busy_buffers_size SIZE:定义“忙”状态下可被发送出去的最大缓冲区数据量。一般设为
proxy_buffers中两个缓冲区大小之和(如8k),防止高负载时堆积过多未发送数据。 -
proxy_max_temp_file_size SIZE 和 proxy_temp_file_write_size SIZE:配合缓冲区溢出使用。前者限制临时文件上限(设为
0可禁用磁盘缓冲),后者控制每次写入临时文件的数据块大小。
关闭缓冲的典型场景与写法
当后端返回的是持续流(如 SSE、视频流、长轮询)或需低延迟透传时,应关闭缓冲:
location /stream/ {
proxy_pass http://backend;
proxy_buffering off;
proxy_cache off; # 缓存与缓冲互斥,关缓冲通常也关缓存
proxy_http_version 1.1;
proxy_set_header Connection '';
}
注意:proxy_buffering off 会禁用所有缓冲逻辑,此时 Nginx 不暂存响应,也不做响应头合并或分块处理,完全依赖后端输出节奏和客户端接收能力。
安全更新和维护 CLI Proxy API(CPA)部署与配置。用于 CPA 镜像升级、配置变更、认证目录兼容修复、上线验证与回滚。适用于用户提到“CPA 更新/升级/配置改了/容器重建/回滚”等场景。
调整缓冲提升小响应吞吐
对大量小响应(如 JSON API),适当减小缓冲可降低内存占用并加快首字节时间:
- 将
proxy_buffers 8 4k改为proxy_buffers 4 2k; - 保持
proxy_buffer_size 2k与之匹配; - 确认
proxy_busy_buffers_size≥ 2 × 单缓冲大小(如设为4k)。
这类调优需结合 nginx -t 验证语法,并观察 Active connections 和 Writing 状态变化,避免因缓冲过小导致频繁系统调用或临时文件写入。
常见误区提醒
不要误以为 proxy_pass 的 URL 尾部斜杠会影响缓冲行为——它只决定路径拼接逻辑。缓冲是否生效、如何分配,完全取决于上述 proxy_buffer* 指令的组合。另外,proxy_buffering 关闭后,proxy_buffer_size 和 proxy_buffers 将被忽略,无需配置。










