自己写的流式接口,本地正常,上了 nginx 之后客户端收到一半就断。

需要改动:

  1. proxy_buffering off; 不关的话 nginx 会攒着发,看着像卡住
  2. proxy_read_timeout 加大,默认 60 秒,长任务会超时
  3. proxy_http_version 1.1 配合 Connection \"\",不用 1.0 的 keep-alive

另外 gzip 要关,对 text/event-stream 不能压缩,会破坏分块。

如果前面还有 CDN:Cloudflare 默认 100 秒超时,而且会缓冲。要么绕开 CDN,要么用它的 Stream 产品。

排查方法:curl -N 看是否逐块到达。一次全出来就是被缓冲了。

主楼