核心是让响应全程在内存中流转,需按p95响应体大小设置proxy_buffers总量与单块大小,配比proxy_busy_buffers_size为总量1/4~1/2且不低于单块大小,并禁用或优化临时文件路径。

防止 Nginx 将大响应写入临时文件,核心是让数据全程在内存中流转——不是堆大数值,而是让 proxy_buffers 总容量匹配业务 P95 响应体大小,同时配比好 busy 区和落盘策略。
按响应特征设对 proxy_buffers 总量与单块大小
proxy_buffers 决定每个请求能用多少内存暂存响应体(不含响应头)。默认 8 4k(共 32KB)根本不够用,一超就落盘。
- 常规 API / HTML(50–500 KB):用
proxy_buffers 16 128k(总 2MB),覆盖大多数场景,内存开销可控 - 报表导出、镜像拉取等(几 MB~百 MB):用
proxy_buffers 32 256k(总 8MB),需同步评估并发压力 - 超大 JSON 或配置导出(20–100 MB):优先增大单块 size,例如
proxy_buffers 4 16m(总 64MB),减少 buffer 管理开销和碎片 - 避免极端配置:如
proxy_buffers 64 4m(单请求占 256MB),10 并发就可能触发 OOM
必须配好 proxy_busy_buffers_size 控制“已收未发”上限
这个值不是额外内存,而是从 proxy_buffers 总量里划出的“正在发给客户端”的缓冲区上限。设错会直接卡住后端写入。
安装并运行 Aperture(Lightning Labs 的 L402 闪电反向代理),用于创建 L402 付费墙、配置付费 API 端点、为其他代理托管付费内容或测试 L402 认证流程。
- 必须 ≥ 单块 buffer 大小,否则刚写满一块就暂停接收
- 推荐设为总量的 1/4 到 1/2:比如
proxy_buffers 16 128k(总 2MB),则proxy_busy_buffers_size 1m是稳妥选择 - 若用
proxy_buffers 32 256k(总 8MB),建议设为4m
禁用或严格约束临时文件行为
只要开始写临时文件,I/O 延迟和内核回写压力就会拖慢整个链路——这是响应变慢最直接的源头。
- 内存充足且可接受超限失败:直接
proxy_max_temp_file_size 0,超出即返回 502,比默默落盘更利于暴露瓶颈 - 必须允许落盘时:把临时目录挂到内存盘,如
proxy_temp_path /dev/shm/nginx_temp 1 2,再配合proxy_temp_file_write_size 256k减少小 write() 调用 - 切勿将
proxy_temp_path指向系统盘或低速磁盘,尤其不要和 access_log 共用同一分区
验证是否真正绕开了磁盘路径
reload 配置不等于生效,得看真实行为:
- 开启 debug 日志:
error_log /var/log/nginx/error.log debug;,搜索writing to temp file - 若仍有高频出现,说明缓冲设计仍不足,或后端突发超大响应未被覆盖
- 用
curl -I检查响应头是否含准确Content-Length,确认未被 chunked 截断










