proxy_buffers需按响应大小分档配置,匹配后端推送块大小、控制busy缓冲区上限,并协同header缓冲与落盘策略,否则易引发OOM或502。

proxy_buffers 不是填个大数字就能扛住高并发,关键在于让每个请求的缓冲区“刚好够用、不卡顿、不浪费”。它必须和后端响应的大小分布、推送节奏、客户端读取速度三者对齐,否则不是频繁落盘拖慢吞吐,就是内存吃紧触发 OOM。
按响应体大小分档设总量,覆盖 90% 请求
单个请求占用内存 = proxy_buffers 数量 × 单块大小,这个总和要兜住你业务里绝大多数响应:
-
中小响应(API JSON、SSR 首屏、静态资源,50–500KB):用
proxy_buffers 16 128k(总量 2MB),兼顾 200+ 并发与单请求开销 -
中大响应(报表导出、模板渲染、镜像回源,1–50MB):用
proxy_buffers 32 256k(总量 8MB),但需同步限流或启用proxy_buffering off流式转发 -
严禁堆数量:比如
proxy_buffers 64 4m单请求占 256MB,10 并发就压垮 2GB 内存机器
匹配后端推送块大小,减少 buffer 切换开销
Nginx 每次从后端读数据,优先填满一块再换下一块。若单块大小和后端实际分块不匹配,会徒增内存管理压力:
- 后端按 32KB 分块推送(如 SSE、分块 JSON)→ 设
proxy_buffers 16 32k - 后端常返回 128–256KB 的 HTML/JSON →
proxy_buffers 8 256k更稳 - 单块大小建议为系统页大小(4KB)整数倍,如 128k、256k、512k,利于 TLB 命中和内存分配效率
控制“已收未发”上限,防后端写入阻塞
光加 proxy_buffers 不够,必须用 proxy_busy_buffers_size 管住“正在发给客户端但还没清空”的那部分:
- 该值必须 ≥ 单块大小(否则刚写满一块就停)
- 推荐设为总量的 1/4~1/2:例如
proxy_buffers 16 128k(总 2MB)→proxy_busy_buffers_size 1m - 设太小:后端写入被卡住,延迟陡增,甚至触发 502
- 设太大:空闲 buffer 不足,新请求无法及时接收数据
配合 header 缓冲与落盘策略,避免隐性瓶颈
proxy_buffers 只管响应体,响应头由 proxy_buffer_size 单独控制:
- 若后端返回长 Cookie、JWT 或多 Set-Cookie,需调大
proxy_buffer_size至16k或32k(注意:该值必须小于单块proxy_buffers大小) - 内存充足时,直接禁用落盘:
proxy_max_temp_file_size 0,超限时返回 502,比默默写磁盘更易定位瓶颈 - 若必须落盘,把临时路径挂到内存盘:
proxy_temp_path /dev/shm/nginx_temp 1 2,避开磁盘 I/O 干扰 page cache
不复杂但容易忽略











