关键不是简单开关proxy_buffering,而是按响应类型精准控制:普通API/页面开启以释放后端连接;SSE(/events、/stream)、LLM流(/llm/chat)、HMR(/__webpack_hmr)、流式上传(/api/upload/chunk)等必须在location块中设off,并同步配置proxy_http_version 1.1、proxy_read_timeout、proxy_cache off、gzip off等。

配置 proxy_buffering 不是简单设 on 或 off 就完事,关键在于按业务响应类型做精准控制:普通 API 和页面适合开启以释放后端连接;SSE、WebSocket、LLM 流式接口、大文件下载等必须关闭,否则会卡顿、延迟高、首字节慢。
哪些 location 必须关 proxy_buffering
以下路径不能依赖缓冲,需在对应 location 块中显式关闭:
-
/events、/stream:SSE 接口,后端逐行输出data:,缓冲会导致事件堆积 -
/llm/chat、/api/generate:大模型 token 流,用户等待体验直接受首包延迟影响 -
/__webpack_hmr、/hot:前端热更新,毫秒级推送中断就会重连 -
/api/upload/chunk:流式分片上传配合响应流时,需端到端零缓冲
关闭时必须同步配置的参数
只写 proxy_buffering off; 极易出 502、截断或连接中断。必须配套设置:
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
-
proxy_http_version 1.1;+proxy_set_header Connection '';:防止长连接被降级 -
proxy_read_timeout 3600;(SSE 可设为86400):避免空闲期误断连 -
proxy_cache off;:避免未结束的 chunked 响应被缓存拦截 -
gzip off;:流式响应无法满足 gzip 完整性要求,开启必失败 -
add_header X-Accel-Buffering no;:显式告知浏览器不缓冲(可选但推荐)
开启时怎么配才不卡顿
对常规 HTML、JSON 等非流式响应,开启能提升吞吐,但要防积压:
-
proxy_buffer_size 16k;:确保容纳大响应头(JWT、多 Cookie、重定向 Location) -
proxy_buffers 8 16k;:总缓冲约 128KB;若后端常返回 300KB+ 数据,可调为16 32k -
proxy_busy_buffers_size 32k;:建议为单 buffer 大小的 2 倍,控制“正在发送中”的缓冲上限 -
proxy_max_temp_file_size 1024m;:允许大响应写临时文件,避免因缓冲不足直接失败
特别注意的细节
proxy_buffer_size 是唯一在 proxy_buffering off 下仍生效的缓冲参数——它只管响应头,和响应体无关。无论开或关,这个值都得设够(至少 16k),否则后端一返回大 header 就报 upstream sent too big header,直接 502。
不要在 http 或 server 块里全局开关,必须落到具体 location。全局关会废掉所有缓冲优化,还可能导致 gzip 失效、临时文件不可用。

















