缓冲区需分三类配置:请求头(client_header_buffer_size)、请求体(client_body_buffer_size)、代理响应(proxy_buffer_size/ proxy_buffers);每类按用途设不同大小,HTTP/2 还需同步调 http2_max_field_size 等参数,proxy_buffering 默认开启,流式场景才关闭。

缓冲区大小不能统一设,得按用途分三类配:请求头、请求体、代理响应,每类有不同逻辑和约束。
客户端请求头缓冲区(client_header_buffer_size)
这是 Nginx 解析 HTTP 请求头用的初始内存空间。默认 1k,但现代应用常带 JWT Token、多段 Cookie 或埋点 Header,很容易超限导致 400 错误。
- 普通网站:2k 足够
- API 网关或含长 Token 场景:建议设为 4k
- 若仍报 414(URI Too Long)或 400,再配合 large_client_header_buffers,例如 large_client_header_buffers 4 8k,表示单个请求头最大支持 8k(注意:不是总和,是单 buffer 容量)
客户端请求体缓冲区(client_body_buffer_size)
用于暂存 POST/PUT 的表单数据或小文件上传。超过该值,Nginx 会写临时文件,触发磁盘 I/O。
- 常规表单提交:8k~16k 即可
- 上传接口(如头像、文档):按预期最大单次 body 大小设,比如 client_body_buffer_size 32k
- 同时别忘了配 client_max_body_size(控制 413 错误阈值),两者要匹配
代理响应缓冲区(proxy_buffer_size / proxy_buffers)
这部分最容易出 502,关键在区分“响应头”和“响应体”:
- proxy_buffer_size 只管响应头(状态行 + 所有 headers),默认 4k 很容易被 Set-Cookie、自定义 Header 打爆。实测 header 总字节数后,设为略大一档:5200 字节 → 8k;12345 字节 → 16k;必须小于单块 proxy_buffers 的 size
- proxy_buffers 管响应体,例如 proxy_buffers 8 256k 表示共 2MB 缓冲空间。静态资源或 API 响应不大时,8 128k 就够;大页面或导出报表可适当加大
- HTTP/2 必须同步调 http2_max_field_size(单个 header 字段)和 http2_max_header_size(所有 header 总和),否则照样 502
要不要开 proxy_buffering?
默认 on,适合绝大多数 REST API 和 SSR 页面;但 SSE、gRPC-Web、日志流等持续输出场景必须设为 off —— 此时 proxy_buffers 和 proxy_busy_buffers_size 失效,proxy_buffer_size 也不起作用,Header 由后端自己控长。
别为了绕过 502 把 buffering 关掉,那是掩盖问题,不是解决。


















