proxy_buffer_size 专用于缓存后端响应头,设小会报“upstream sent too big header”,设大会增加内存占用;需根据实测响应头大小(如5212字节设6k/8k)并配合proxy_buffers协同配置。

proxy_buffer_size 直接决定 Nginx 能否完整接收后端返回的响应头。设小了,会报 upstream sent too big header;设大了,每个连接多占内存,高并发下反而拖慢整体性能。
它只管响应头,不管响应体
这个参数专用于缓存后端响应的 headers(含状态行、所有字段及 CRLF 换行符),和 body 无关。默认值通常是 4k 或 8k,在 JWT、长 Cookie、多级网关透传等场景下极易不够用。
- 实测最大响应头为 5212 字节 → 建议设为 6k 或 8k,留出安全余量
- 若后端返回带大量自定义 Header(如审计标记、链路追踪 ID),建议先抓包或用
curl -v查看完整 header 长度再定值 - 设成 64k 甚至更大虽能“兜底”,但每个活跃连接都会额外占用对应内存,万级并发时可能多耗几百 MB 内存
必须配合 proxy_buffers 协同生效
proxy_buffer_size 和 proxy_buffers 是两套独立机制:前者只装 header,后者才管 body 缓冲区数量和大小。调大 proxy_buffer_size 不会自动放大 body 缓冲能力。
- 若后端返回大响应体(如报表导出、文件下载),需单独配置 proxy_buffers(例如
proxy_buffers 8 128k) - proxy_busy_buffers_size 应设为 proxy_buffers 总量的 1/4~1/2,且不低于单 buffer 大小(如 128k)
- proxy_buffering off 会绕过所有缓冲限制,包括 proxy_buffer_size,但失去响应头控制能力,仅作临时排查手段
典型场景推荐值
不靠猜测,按实际负载分档设置:
-
普通 API / SSR 页面:响应头常含 JWT + Set-Cookie,实测多在 4–8KB → 设
proxy_buffer_size 12k或16k -
微服务网关 / 多层透传:Header 累加后易超 12KB → 可设
proxy_buffer_size 24k,同时收紧proxy_read_timeout防止等待过久 -
静态资源网关(含 ETag、Content-MD5 等):Header 相对精简 →
proxy_buffer_size 8k足够,重点调优 proxy_buffers 和 proxy_busy_buffers_size
验证是否真正生效
reload 后不能只看语法通过,要观察运行态信号:
- 查 error log:出现
upstream sent too big header说明仍不够;有具体字节数(如 “header: 9842”)就按此+2k 设置 - 用
curl -I检查响应头是否完整返回,尤其关注Content-Length是否存在、Set-Cookie是否被截断 - 若发现
net::ERR_CONTENT_LENGTH_MISMATCH,大概率是 proxy_buffer_size 过小导致 header 被切片,引发后续解析错乱











