直接修改 fastcgi_buffer_size 即可,需根据错误日志中“upstream sent too big header”后的实际字节数(如14280),取略大的2的幂值(如16k),并确保 ≤ fastcgi_buffers 单个buffer大小,再同步调整 busy_buffers_size 和 temp_file_write_size,最后 nginx -t && nginx -s reload。

直接改 fastcgi_buffer_size 就行,但不能乱设——它只管响应头(status line + 所有 headers),不处理响应体;设小了会报 upstream sent too big header,设大了又浪费内存。关键在“精准略调”,不是堆数值。
先看错误日志定位真实大小
遇到 502 或 Header 截断,别猜。打开 Nginx error log(通常是 /usr/local/nginx/logs/error.log 或 /var/log/nginx/error.log),搜索关键词:
upstream sent too big header- 找到对应请求行,后面紧跟着类似:
header: 14280 bytes
这个数字就是实际响应头字节数。记下来,比如是 14280,那下一步就围绕它展开。
设置 fastcgi_buffer_size 的合理值
取比日志里那个数略大的、2 的幂值(便于内存对齐,也符合 Nginx 内部机制):
立即学习“PHP免费学习笔记(深入)”;
- 14280 → 推荐设
16k(16384 字节) - 21500 → 推荐设
32k(32768 字节) - 不要直接写
64k或128k,除非日志明确显示超 50KB
在 location ~ \.php$ { ... } 块里加上这一行:
检查并同步 fastcgi_buffers 配置
fastcgi_buffer_size 必须 ≤ fastcgi_buffers 中单个 buffer 的大小,否则无效。例如:
- 如果你写了
fastcgi_buffers 8 16k,那fastcgi_buffer_size最大只能是16k - 如果想设
32k,就得同步改成fastcgi_buffers 8 32k或类似组合 - 已有
fastcgi_buffers行?不用删,补上fastcgi_buffer_size即可
顺手优化配套参数(防连锁问题)
单调一个参数容易顾此失彼。建议一并检查这几项:
-
fastcgi_busy_buffers_size:设为单个 buffer 大小的 2 倍,如32k(对应16kbuffer) -
fastcgi_temp_file_write_size:也设成和 busy_buffers_size 一致,避免小块写磁盘 - 确认
fastcgi_pass指向正确(127.0.0.1:9000或 socket 路径),且 PHP-FPM 确实在运行
改完执行 nginx -t && nginx -s reload 生效,再复测原请求是否还报错。



















