proxy_buffering需按响应类型分级控制:api和静态资源开启以释放后端连接,sse、llm流、大文件下载等必须关闭以避免首字节延迟和内存积压,并须按location精细化配置及同步调优配套参数。

proxy_buffering 不是“开就快、关就慢”的开关,而是要按响应类型做针对性控制:对常规 API 和静态资源保持开启以释放后端连接;对 SSE、LLM 流、大文件下载等必须关闭,避免首字节延迟和内存积压。
区分场景决定开或关
开启(on)适合:
- JSON 接口、HTML 页面等响应体小且固定的服务
- 后端网络不稳定,需快速收完响应并断连,防止拖住源站
- 客户端网络较差(如移动弱网),Nginx 可匀速转发,解耦速率差
关闭(off)必须用于:
- SSE(/events)、WebSocket 升级响应、LLM token 流(/llm/chat)
- 实时日志推送、HMR 热更新、gRPC-Web 等依赖逐块接收的场景
- 大文件下载(≥10MB)或视频分片,避免缓冲区溢出写盘卡顿
按 location 精细化配置,不搞全局一刀切
不要在 http 或 server 块里统一设 proxy_buffering off——这会让所有请求失去缓冲优化,还导致 gzip 失效、临时文件不可用。
-
location /api/ { proxy_buffering on; }—— 保持默认优化 -
location /stream { proxy_buffering off; }—— 明确流式路径禁用 -
location /upload { proxy_request_buffering off; }—— 注意这是请求体缓冲,不是 proxy_buffering
配套参数必须同步调优
proxy_buffering 单独设置无效,必须协同以下参数:
-
proxy_buffer_size 8k;—— 专存响应头,实测 header 超过 5212 字节就至少设为 8k -
proxy_buffers 8 16k;—— 总缓冲约 128KB;若后端常返回 300KB+ 响应,可调为16 32k -
proxy_busy_buffers_size 32k;—— 建议设为单 buffer 大小的 2 倍,留出边读边发空间 -
proxy_max_temp_file_size 1024m;—— macOS 默认 tmpfs 小,代理大文件时务必放大
关闭 buffering 后的必要补丁
关了 proxy_buffering,Nginx 不再接管响应生命周期,这些项必须补上:
-
proxy_http_version 1.1;+proxy_set_header Connection '';—— 维持长连接 -
proxy_read_timeout 300;—— SSE 等长连接需延长,防 Nginx 主动断连 -
gzip off;—— 关缓冲后无法等完整响应再压缩,必须禁用 - 确认内核
net.core.rmem_max足够,高并发流式请求下 socket 缓冲易成瓶颈











