核心是关闭 proxy_buffering 和 proxy_request_buffering;需配以 proxy_buffer_size 4k、proxy_busy_buffers_size 16k、proxy_buffers 8 4k,启用 chunked_transfer_encoding on 及延长 proxy_read_timeout 300s 等超时。

要让 Nginx 高效支持流式数据(如 AI 对话、SSE、语音识别结果)的实时传输,核心不是“调大缓冲”,而是**精准关闭或缩小与流式冲突的缓冲机制**。默认配置是为传统 HTTP 响应设计的,会蓄满再发,这直接对抗流式“边生成边推送”的本质。
必须关闭的两个关键缓冲
这两个开关不关,流式响应一定会被卡住、延迟甚至截断:
- proxy_buffering off; —— 关闭响应体缓冲。这是最核心一步。开启时 Nginx 会等后端把整个响应发完才开始转发;关闭后,后端每写入一小块,Nginx 就立刻向客户端推送。
- proxy_request_buffering off; —— 关闭请求体缓冲。对流式上传(如长语音流)尤其重要。开启时 Nginx 会先把整个请求体收全再转给后端,导致首包延迟高、内存暴涨;关闭后,请求数据可边收边传。
保留但需精调的小缓冲区
完全无缓冲不可行,需要极小且可控的缓冲来处理响应头和短数据块:
- proxy_buffer_size 4k; —— 仅用于暂存响应头和首个小数据块。4–8KB 足够,过大反而浪费内存。
- proxy_busy_buffers_size 16k; —— 定义繁忙时可使用的额外内存缓冲上限。建议设为 proxy_buffer_size 的 2–4 倍,防止突发流量触发磁盘临时文件(影响性能)。
- proxy_buffers 8 4k; —— 明确设置 8 个 4KB 缓冲区(共 32KB),比默认值更可控,避免隐式分配过多内存。
配套必须启用的协议与超时项
缓冲调对了,但协议和超时不匹配,连接仍会中断或卡死:
- chunked_transfer_encoding on; —— 启用分块传输编码,让客户端能识别并逐块解析流式响应,是 SSE 和大模型流式输出的基础。
- proxy_read_timeout 300; 和 proxy_send_timeout 300; —— 流式连接持续时间长,必须大幅延长超时(单位:秒),否则空闲期稍长就会断连。
- keepalive_timeout 650; —— 配合 upstream 的 keepalive,减少 TCP 握手开销,提升长连接稳定性。
其他易忽略但关键的细节
这些配置虽不直接属于“缓冲”范畴,却直接影响流式链路是否真正畅通:
- proxy_http_version 1.1; —— 必须显式声明,HTTP/1.1 才支持 chunked encoding;HTTP/1.0 不支持,会导致流式失效。
- proxy_set_header Connection ''; —— 清除 Connection 头,避免代理中间件误判连接状态,引发提前关闭。
- proxy_cache off; —— 禁用缓存,流式内容不可缓存,否则用户看到的是旧数据或响应被截断。
- proxy_temp_path /dev/shm/nginx_temp; —— 如需临时文件,指向内存盘(如 /dev/shm),避免磁盘 IO 拖慢流速。


















