proxy_buffer_size 仅控制反向代理时Nginx接收后端响应头的缓冲区大小,不影响请求缓冲、响应体或TCP层;设小会导致“upstream sent too big header”错误,且须小于单块proxy_buffers大小并置于location块中proxy_pass前。

它不参与以下任何环节:
- 客户端发来的请求头或请求体(那是 `client_header_buffer_size` 和 `client_max_body_size` 管的)
- 后端响应的响应体(body),那是 `proxy_buffers` 和 `proxy_busy_buffers_size` 管的
- TCP 层收发缓冲(那是内核 `net.ipv4.tcp_rmem` / `tcp_wmem` 控制的)
- HTTP/2 的 HPACK 字段解码限制(那是 `http2_max_field_size` 控制的)
它的作用非常聚焦:确保 Nginx 能完整读入后端返回的响应头。设小了,就会在 error log 中报错:
upstream sent too big header比如后端返回一个带长 JWT、多个 Set-Cookie、多层网关透传的响应头,实测总长 5212 字节(含换行符),那么 `proxy_buffer_size 4k` 就不够,必须至少设为 `6k` 或 `8k`。
注意两个硬约束:
- 必须放在 `proxy_pass` 指令之前,且在 `location` 块中生效(不能只写在 `http` 块里指望全局覆盖)
- 值必须小于单块 `proxy_buffers` 的大小(例如 `proxy_buffers 8 128k` 时,`proxy_buffer_size` 最大只能设 `128k`,但通常只需 `16k`)
它按每个连接单独分配内存。设成 `64k` 看似稳妥,但万级并发下会额外占用几百 MB 内存——这不是性能提升,而是隐性开销。


















