必须关闭 proxy_buffering,因其默认缓存响应体导致流式数据卡顿;同时需禁用 proxy_cache、延长 proxy_read_timeout、启用 http/1.1 与 chunked 传输,并按场景补充 sendfile、cache-control 等配置。

要让 Nginx 对静态流式数据(比如大视频文件、实时日志流、SSE 事件流)做到“即时无缓冲转发”,核心就是关闭 proxy_buffering,让响应体不经过内存攒批,而是收到一点就立刻发给客户端。
为什么必须关掉 proxy_buffering
默认开启时,Nginx 会把后端返回的响应体先收进缓冲区(默认最多 128KB),等填满或后端连接关闭才统一发出。这对静态流式数据会造成明显卡顿:前端可能等几秒才看到第一个字节,后续数据也成块涌出,完全破坏流式体验。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
设为 off 后,Nginx 不再缓存响应体,直接做 TCP 层透传——后端每 write 一次,Nginx 就立即 flush 一次,真正实现“边收边发”。
只关 proxy_buffering 还不够,这些参数得一起调
-
禁用代理缓存:加上
proxy_cache off;,避免 Nginx 尝试缓存流式响应(SSE 或大文件下载都不该被缓存) -
延长读超时:设
proxy_read_timeout 300;或更长,防止后端慢速输出时 Nginx 主动断连 -
启用 HTTP/1.1 分块传输:加
proxy_http_version 1.1;和proxy_set_header Connection '';,确保长连接与 chunked 编码正常工作 -
显式开启分块编码:加
chunked_transfer_encoding on;,避免 Nginx 因无法确定 Content-Length 而阻塞发送
针对不同静态流场景的补充要点
大文件下载(如 .mp4、.zip):
- 建议同时设 client_max_body_size 0;(若需支持上传)和 sendfile on;(内核零拷贝加速)
- 若需限速,用 limit_rate_after 1m; limit_rate 5m; 控制稳定吞吐,避免突发打满带宽
SSE(服务器发送事件):
- 必须加 add_header Content-Type "text/event-stream"; 和 add_header Cache-Control "no-cache";
- proxy_read_timeout 建议设为 86400(24 小时),匹配 SSE 长连接特性
实时日志或监控流(如 /logs/stream):
- 确保后端使用 flush() 或设置 Transfer-Encoding: chunked
- 可加 tcp_nodelay on; 减少 Nagle 算法带来的微小延迟
Kubernetes Ingress 中的写法要注意
Ingress-nginx 不认全局配置,必须用注解:nginx.ingress.kubernetes.io/proxy-buffering: "off"
注意值必须是字符串 "off",不能写 false 或 0,否则会被忽略。










