proxy_buffer_size 应基于实测响应头大小设置,如5200字节设8k;须小于单块proxy_buffers大小,http/2还需同步调整http2_max_field_size和http2_max_header_size。

直接根据实测响应头大小设置,别猜、别堆大值。proxy_buffer_size 只管响应头(状态行 + 所有 headers,含每行末尾的 \r\n),不是响应体,也不影响 TCP 层传输。
先测真实 header 大小
盲目设 64k 或 1m 会浪费内存,尤其高并发时。必须基于实际数据:
- 用
curl -v https://your-api/ 2>&1 | grep '^ 抓原始响应头,手动加总所有字符 + 每个 <code>\r\n(各占 1 字节) - 或临时开启 debug 日志:
error_log /var/log/nginx/error.log debug;,复现请求后日志会明确提示类似header: 13782 bytes - 实测值为 5200 字节 → 设
proxy_buffer_size 8k;12345 字节 → 设16k;28900 字节 → 设32k
必须满足大小约束关系
这个值不能随便填,否则 Nginx 启动失败或持续报 502:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 必须放在
location或server块中,且在proxy_pass指令之前 - 必须小于单块
proxy_buffers的大小(例如proxy_buffers 8 128k时,proxy_buffer_size最大只能设 128k,但通常只需 16k) - 若设得比单 buffer 还大,Nginx 直接报错
upstream sent too big header
HTTP/2 场景要额外配两处
启用了 http2(如 listen 443 ssl http2;),光调 proxy_buffer_size 不够:
-
http2_max_field_size 16k:HPACK 解码后单个 header 字段上限(比如一条超长 Cookie),默认仅 4k,必须同步调大 -
http2_max_header_size 64k:所有 header 总和上限,建议设为与proxy_buffer_size同量级或略高 - 这两个指令必须放在
http块中,全局生效
别漏掉 proxy_buffering 开关的影响
这个参数只在 proxy_buffering on 时起作用:
- 保持
on(默认)适用于 REST API、SSR 页面等常规场景,是启用 header 缓冲的前提 - 若设为
off(如 SSE、gRPC-Web 等流式响应),Nginx 直接透传 header,proxy_buffer_size被忽略,此时应由后端控制 header 长度 - 日常不要关 buffering 来“绕过” 502,那是掩盖问题,不是解决










