启用fastcgi_buffering on(默认开启)仅是前提,必须同步配置fastcgi_buffer_size(响应头,通常4k/8k)、fastcgi_buffers(响应体,如8 16k)、fastcgi_busy_buffers_size(如8k)、fastcgi_max_temp_file_size(可设0禁磁盘)及fastcgi_read_timeout(需≥php-fpm超时)等参数,才能实现高效内存缓冲、避免频繁磁盘i/o。

直接在 Nginx 的 location 块或 server 块中加上 fastcgi_buffering on; 就算启用缓冲了——它默认就是开启的,但显式写出更清晰、便于统一维护。
关键配套参数必须同步设置
只开 buffering 不调缓冲区大小,等于没优化。核心是让响应尽量留在内存里,避免写磁盘:
-
fastcgi_buffer_size:专用于响应头(如 Status、Content-Type、Set-Cookie),一般设为
4k或8k;若后端返回大量 Cookie 或自定义长 Header,建议提到16k或32k,防止报错 “upstream sent too big header” -
fastcgi_buffers:负责响应体(HTML、JSON 等主体内容),推荐组合如
fastcgi_buffers 8 16k;(共 128KB 内存),兼顾常见页面大小与内存效率;高负载或大报表场景可调至16 16k -
fastcgi_busy_buffers_size:控制“正在发送中”缓冲区的上限,通常设为
fastcgi_buffer_size的 2 倍,例如8k或32k,避免阻塞新数据读入
临时文件写入要合理约束
当响应超出所有缓冲区总和时,Nginx 会落盘。频繁写临时文件会拖慢性能,需精细控制:
-
fastcgi_max_temp_file_size:单个临时文件最大体积,默认 1024MB;若内存充足且响应可控,可设为
0(禁用磁盘缓存),强制全内存处理;否则建议设为128m或256m -
fastcgi_temp_file_write_size:每次写磁盘的块大小,设为
32k或64k,比fastcgi_buffer_size大,减少系统调用次数
别忘了超时与连接协同
缓冲机制生效的前提是后端有足够时间输出完整响应:
-
fastcgi_read_timeout:默认 60 秒,对耗时脚本(如导出 Excel、聚合查询)务必调大,例如
300(5 分钟) - fastcgi_pass 和 fastcgi_param SCRIPT_FILENAME 等基础转发指令必须正确配置,否则 buffering 无从谈起
- 确认 PHP-FPM 的
request_terminate_timeout不早于 Nginx 的fastcgi_read_timeout,避免后端提前中断











