处理大模型流式SSE转发,Nginx代理缓冲关闭的正确参数

大模型接口通常以 SSE(Server-Sent Events)方式把结果逐字或逐段推送给前端,如果中间经过 Nginx 反向代理,默认开启的代理缓冲会把响应攒到一定大小再统一发出,导致前端不是实时收到字符,而是等很久才一次性出现大段内容。
解决这个问题需要在 Nginx 转发配置里关闭代理缓冲,核心参数是 proxy_buffering off;,同时配合禁用代理缓存和设置 HTTP 1.1,下面按零基础可照做的顺序展开。

为什么 SSE 转发必须关闭 Nginx 缓冲

Nginx 的 proxy_buffering 默认开启,它会将后端返回的数据先存到缓冲区,直到攒够 4KB 或响应结束才发送给客户端。
对普通接口影响不大,但 SSE 依赖长连接和持续输出,一旦被缓冲,逐字推送就变成了延迟释放,表现就是“等半天突然出现一大段”。
大模型场景中用户期待的是打字机效果,所以必须关闭缓冲。

正确参数配置示例

在 Nginx 配置中,找到需要转发大模型接口的 location 块,加入以下配置:

location /v1/chat/completions {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 3600s;
    proxy_send_timeout 3600s;
}

每一项含义如下:

  • proxy_http_version 1.1;:后端默认支持 HTTP/1.1,SSE 长连接必需。
  • proxy_set_header Connection "";:清空 Connection 头,避免 Nginx 复用上游连接时影响流式响应。
  • proxy_buffering off;:核心参数,关闭代理缓冲,数据到达后立即转发给客户端。
  • proxy_cache off;:关闭代理缓存,防止响应被缓存导致不实时。
  • proxy_read_timeoutproxy_send_timeout:设置较长超时时间,避免流式输出中途被 Nginx 掐断。

完整操作步骤

先确认 Nginx 配置文件位置。
Debian/Ubuntu 系统一般在 /etc/nginx/nginx.conf,CentOS 在 /etc/nginx/nginx.conf,站点配置通常在 /etc/nginx/conf.d//etc/nginx/sites-available/
如果使用宝塔面板,可以在“网站 → 设置 → 配置文件”中直接编辑。

按顺序执行:

  1. 打开对应站点配置文件,找到需要代理大模型接口的 location
  2. 粘贴上面的配置片段,注意把 proxy_pass 改成你自己的后端地址。
  3. 保存文件后执行 nginx -t 检查语法,出现 syntax is ok 表示正常。
  4. 执行 systemctl reload nginxnginx -s reload 重载配置。

重载不会中断现有连接,可以放心操作。

常见配置坑点

只关闭 proxy_buffering 不一定完全生效,还需要留意以下几点:

  • 如果开启了 proxy_cache,即使关闭 buffering,缓存层也可能吞掉流式响应,务必加上 proxy_cache off;
  • 不要在后端同时开启 gzip,否则 Nginx 或前端可能因为压缩缓冲导致流式数据延迟,建议 SSE 接口单独关闭压缩。
  • 如果 Nginx 前面还有 CDN 或另一层反向代理,那一层也需要关闭缓冲,比如 Cloudflare 有 buffer 开关。
  • 某些情况下还需要设置 fastcgi_buffering off;,但该指令只影响 FastCGI 上游,常规 HTTP 代理不需要。
  • 如果使用了 proxy_buffers 之类的指令,关闭 buffering 后这些配置不会生效,不用重复设置。

验证流式转发是否正常

修改配置后,可以用 curl 直接测试后端和 Nginx 的行为差异。
先测后端:

curl -N --max-time 60 http://后端地址/v1/chat/completions -H "Content-Type: application/json" -d '{"stream": true}'

观察是否逐字输出。
然后测 Nginx 地址:

curl -N --max-time 60 https://你的域名/v1/chat/completions -H "Content-Type: application/json" -d '{"stream": true}'

如果 Nginx 地址也能逐字出现内容,说明 proxy_buffering off; 已生效。
另外可以用 curl -I 查看响应头,如果看到 X-Accel-Buffering: no,也说明 Nginx 已确认关闭缓冲。

如果发现输出仍然不实时,优先检查是否有多层代理、是否开启了 gzip、以及 proxy_cache 是否真的关掉。
配置完成后建议用实际大模型接口连续测试几分钟,确认流式输出稳定后再接入生产环境。

分享到:
上一篇
上游API返回不同编码格式,中转统一输出UTF‑8处理
下一篇
自建AI中转遇到运营商QoS,大流量长连接被切断问题
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意