核心是按响应特征分层配置:先开关proxy_buffering决定缓存行为,再调大proxy_buffer_size防502(至少8k),然后依响应体大小配proxy_buffers和proxy_busy_buffers_size,最后调长proxy_read_timeout并验证日志。

核心是按响应特征分层配置:先决定是否缓存响应体,再针对性调大响应头缓冲,最后匹配响应体流量设缓冲区容量,不是所有参数都越大越好。
先开关 proxy_buffering,定下缓冲行为基调
这个指令控制 Nginx 是否暂存后端响应再转发:
- proxy_buffering on(默认):适合 API、静态资源等响应快、需控制节奏的场景;Nginx 边收边传,但依赖足够缓冲空间
- proxy_buffering off:必须用于 SSE、LLM 流式响应、大文件下载等持续输出场景;数据收到即发,proxy_buffers 和 proxy_busy_buffers_size 失效
注意:proxy_buffer_size 始终生效,无论 buffering 开关如何。
重点调大 proxy_buffer_size 防 502
它只管响应头(状态行 + 所有 header 字段 + CRLF),和响应体无关。默认 4k 容易被长 JWT、多 Set-Cookie 或网关透传 header 打爆,报错 “upstream sent too big header”:
- 实测最大响应头长度(含换行符),比如抓包看到 5212 字节,就设为 proxy_buffer_size 8k
- 建议从 8k 或 16k 起步,在对应 location 块中设置,且必须放在 proxy_pass 之前
- 若用 HTTP/2,同步检查 http2_max_field_size(默认也是 4k),否则 HPACK 解码失败也会 502
按响应体大小配 proxy_buffers 和 busy 区
这两个参数协同管理响应体缓冲:
- proxy_buffers 8 256k:共 2MB 缓冲空间,用于暂存响应体;流式场景可设为 16 128k 减少落盘频率
- proxy_busy_buffers_size 512k:定义“正在发给客户端”的缓冲区总上限,建议设为 proxy_buffers 总量的 1/2~1 倍
- 若响应体远超缓冲总量,Nginx 会写临时文件,此时要确保 proxy_temp_path 可写,且 proxy_max_temp_file_size 合理
配套调长超时并验证效果
缓冲区调大后,若后端响应慢或不稳定,仍可能触发 502/504:
- proxy_read_timeout 300:给后端足够时间发完响应头和体,尤其报表导出、日志流等长耗时场景
- 查 error log 中是否还有 “too big header” 或 “upstream timed out”,这是最直接的调优信号
- 高并发下避免盲目设大(如 proxy_buffer_size 64k),每个连接都会额外占用对应内存











