nginx动态内容输出缓冲由fastcgi_buffers、fastcgi_buffer_size等指令控制,前者分配响应体缓冲池,后者专存响应头及开头数据;fastcgi_busy_buffers_size限制待发送缓冲区上限,temp相关指令管理磁盘回退。

Nginx 对动态内容(如 FastCGI、uWSGI、SCGI 等后端生成的响应)的输出缓冲,主要由 fastcgi_buffers、fastcgi_buffer_size 及相关指令控制。这类缓冲不走 sendfile,而是由 Nginx 主动读取后端响应并暂存内存,再分块发给客户端。调整内存阈值的关键,是合理设置缓冲区数量与单块大小,避免过早落盘或内存浪费。
fastcgi_buffer_size 控制响应头缓冲上限
该指令专用于存放后端返回的响应头(headers)和响应体开头一小段数据。它独立于 fastcgi_buffers,且始终生效。
- 默认值通常为 4k 或 8k
- 建议设为 4k~16k:若后端返回大量 Cookie、自定义 Header 或长重定向 Location,可设为 8k;普通 PHP 应用 4k 足够
- 过大无益:Header 部分极少超过几 KB,设成 64k 属冗余
fastcgi_buffers 设置主体响应缓冲区池
该指令决定 Nginx 为每个请求分配多少缓冲区、每块多大,用于暂存响应体主体内容。
- 语法:
fastcgi_buffers number size,例如fastcgi_buffers 8 32k - 单请求最大内存占用 ≈
number × size(不含fastcgi_buffer_size) - 常见调优组合:
- 小 API 响应(fastcgi_buffers 4 8k(总 32KB)
- 普通 HTML/JSON(10–100KB):
fastcgi_buffers 8 16k(总 128KB) - 动态生成报表或大 JSON:
fastcgi_buffers 16 32k(总 512KB),但需评估并发数与 worker 内存压力
fastcgi_busy_buffers_size 控制“正在发送中”的缓冲区上限
Nginx 不会等全部响应收完才发,而是边收边传。这部分“已就绪、待发送”的缓冲区总量受此指令限制。
- 它不是额外内存,而是从
fastcgi_buffers + fastcgi_buffer_size中划出的一部分 - 推荐设为单个
fastcgi_buffers大小的 2 倍,例如fastcgi_buffers 8 16k时,设fastcgi_busy_buffers_size 32k - 若设得太小(如仅 8k),会导致频繁阻塞等待客户端接收,降低吞吐
- 若设得过大(接近总缓冲池),可能挤占接收新数据的空间,引发延迟
fastcgi_temp_file_write_size 和 fastcgi_max_temp_file_size 管理磁盘回退
当响应体超出所有内存缓冲总和时,Nginx 会写入临时文件。这两个参数决定回退行为:
-
fastcgi_temp_file_write_size:每次写入临时文件的数据块大小,建议 64k~128k(匹配 I/O 效率) -
fastcgi_max_temp_file_size:单请求允许的最大临时文件体积,默认 1024m;若业务明确不接受落盘(如高敏感低延迟接口),可设为 0 禁用磁盘缓冲,超限时直接返回 502 - 注意:禁用磁盘缓冲后,必须确保
fastcgi_buffers总容量 ≥ 典型响应体大小,否则请求失败
不复杂但容易忽略











