核心是分清响应头和响应体并按实测数据配置buffer参数:响应头超限(upstream sent too big header)调大fastcgi_buffer_size,响应体过大(upstream sent too big response)则合理设置fastcgi_buffers及busy_buffers_size等配套参数,并调整超时值防TCP窗口收缩。

核心是分清响应头和响应体,再按实测数据配参数,不是堆大数值。盲目调大所有 buffer 容易浪费内存、引发忙缓冲区卡死或 TCP 窗口收缩。
先定位截断类型:看错误日志关键词
打开 /var/log/nginx/error.log,搜索以下关键提示:
-
upstream sent too big header → 响应头超限,问题在
fastcgi_buffer_size -
upstream sent too big response 或 using temporary file → 响应体过大,问题在
fastcgi_buffers或磁盘缓存
响应头太大:精准调大 fastcgi_buffer_size
日志中会明确标出字节数,例如:header: 14280 bytes。取略大的 2 的幂值(利于内存对齐):
- 14280 → 设
fastcgi_buffer_size 16k(16384 字节) - 21500 → 设
fastcgi_buffer_size 32k
该值必须 ≤ fastcgi_buffers 中单块大小。例如用了 fastcgi_buffers 8 32k,那 fastcgi_buffer_size 最大可设 32k;若只设了 8 16k,就不能超过 16k。
写在 location ~ \.php$ { } 块内,且位于 fastcgi_pass 之前。
响应体太大:合理配置 fastcgi_buffers 及配套参数
用 curl -s -w "\n%{size_download}\n" -o /dev/null https://your-site.com/page 测出典型页面返回字节数(如 218KB)。目标是让响应体尽量落在内存缓冲区里,避免刷磁盘:
- 218KB 页面 → 推荐
fastcgi_buffers 12 32k(总 384KB),或fastcgi_buffers 8 64k(总 512KB) - 高数据密度接口(如导出预览、权限树 JSON)→ 用
fastcgi_buffers 8 64k或16 32k
必须同步配置:
-
fastcgi_busy_buffers_size设为单块 size 的 2 倍(如 32k → 64k) -
fastcgi_temp_file_write_size与 busy_buffers_size 保持一致(如都设 64k) -
fastcgi_temp_path对应目录需有读写权限,fastcgi_max_temp_file_size建议设 1024m,别设为 0
别漏掉超时与流式适配
后端已发数据但 Nginx “停着不收”,常因缓冲区满导致 TCP 窗口收缩,表现为传输卡顿或中途断连:
-
fastcgi_read_timeout控制从 FastCGI 读取响应的总等待时间,建议 ≥ 300s;SSE、导出类接口可设 600s -
fastcgi_send_timeout是向客户端发送数据的间隔超时,若后端每 30 秒 flush 一次,此值至少设为 45s
改完执行 nginx -t && nginx -s reload,再用 curl -I 检查关键 Header 是否完整,确认 error.log 不再出现对应警告。


















