proxy_buffer_size 是 nginx 专用于缓存响应头的独立缓冲区,需根据实测响应头大小(含\r\n)向上取整至最近 2 的幂次设置,且必须小于 proxy_buffers 单块大小,仅在 proxy_buffering on 时生效,http/2 下还需兼顾 http2_max_field_size。

proxy_buffer_size 是 Nginx 里专管响应头(status line + headers)的独立缓冲区,不是越大越好,而是要刚好够用——设小了会触发 502 Bad Gateway,设大了又浪费内存,尤其在高并发下。
先实测再设值,别猜
真实响应头大小决定配置底线:
- 用
curl -v https://your-api/ 2>&1 | grep '^ 查原始响应头,手动统计所有字符 + 每行末尾的 <code>\r\n(各占 1 字节) - 或临时开启 debug 日志:
error_log /var/log/nginx/error.log debug;,复现请求后日志会明确提示类似header: 13782 bytes - 实测值为 12345 字节 → 推荐设
proxy_buffer_size 16k(向上取整到最近的 2 的幂次);实测 28900 字节 → 设32k
必须满足大小约束关系
这个值不能孤立设置,它和 proxy_buffers 有硬性依赖:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
-
proxy_buffer_size必须小于单块proxy_buffers的大小(例如proxy_buffers 8 128k,则proxy_buffer_size最大只能设128k,但通常 16k 就够) - 若设得比单 buffer 还大,Nginx 启动时直接报错:
upstream sent too big header,并返回 502 - 它和
proxy_buffers、proxy_busy_buffers_size职责分离:前者只管 header,后两者只管 body
只在 proxy_buffering on 时生效
这个参数不是“永远起作用”的:
-
proxy_buffering off(如 SSE、gRPC-Web、LLM 流式响应场景),Nginx 直接透传 header,不校验长度,proxy_buffer_size被完全忽略 - 日常 REST API、SSR 页面等建议保持
on,这是启用 header 缓冲的前提 - HTTP/2 场景下还需同步检查
http2_max_field_size(默认 4k),它独立限制 HPACK 解码后的单字段长度,也可能导致截断和 502
优先从源头精简 header
调大缓冲只是兜底,不是长期解法:
- 排查后端是否注入重复
Set-Cookie、未清理的调试头(如X-Debug-Info、X-Powered-By) - 检查中间件(如认证网关、API 网关)是否叠加冗余 header
- JWT token 放在
Authorization头里没问题,但避免同时在 cookie 和 header 里重复传










