curl -N -H 'Accept: text/event-stream' https://api.example.com/chat
nginx: proxy_buffering off;

本地直连模型 0.6 秒开始吐字,经过 Nginx 后前端 30 秒才一次性收到整段,loading 转了半分钟。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:上游响应没带关闭缓冲的头,Nginx 默认 proxy_buffering on,把 SSE 攒在缓冲区里等结束才下发。前端看到的自然是一次性返回。

围绕「流式响应网关缓冲」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。监控和日志的时间要对上,时区不一致会多绕很大一圈。

临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。动手前把原文件复制一份带时间戳,出问题立刻换回去,比现场分析快得多。

一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。

处理上按这个顺序:上游响应加 X-Accel-Buffering: no;对应 location 关掉 proxy_buffering 和 proxy_cache;确认 gzip 不对 text/event-stream 生效;用 curl -N 观察是否逐行输出。

确认没问题再收工,curl -N 每秒都有新行输出 前端首字时间回到 1 秒内。

作者 9823189