proxy_max_temp_file_size 限制单个临时文件最大大小,仅在 proxy_buffering on 且响应超出内存缓冲时生效,超限则拒绝或流式转发,需结合业务响应特征、磁盘余量与存储类型合理设置,并同步调整 proxy_buffering、proxy_buffers 等配套参数。

proxy_max_temp_file_size 的作用很明确:它不控制总磁盘用量,只管“单个临时文件最多能写多大”。设得太大,一个异常响应就可能打满分区;设得太小,又容易触发流式转发或 502 错误。关键在于匹配业务响应特征和磁盘余量,精准卡住那个“不该落盘”的边界。
先搞清它到底限制什么
这个参数仅对 proxy_buffering on 时、后端响应体超出内存缓冲(proxy_buffer_size + proxy_buffers)的部分生效。一旦超限,Nginx 不会拆分写多个小文件,而是直接拒绝(返回 500/413)或切为流式转发。它不管:
- proxy_cache 缓存总空间(归 proxy_cache_path max_size 管)
- client_body_temp_path 下的上传临时文件(归 client_max_body_size 和 client_body_buffer_size 管)
- 多个并发请求产生的所有临时文件总大小
按业务响应分布设合理值
别拍脑袋填 1G 或 0,要结合真实数据:
- 查后端常见响应体:API JSON 通常在 100KB 内,报表导出多在 2–10MB,视频分片常为 5–50MB
- 看磁盘余量:proxy_temp_path 所在分区空闲空间 ≥ 3 × 该值(预留并发写入余量)
- 看存储类型:机械盘或低配云盘建议 ≤10m;NVMe SSD 可设 20m–50m;纯小响应 API 网关可设 1m–2m
必须同步调的配套参数
单改这一项基本没用,得组合控制:
- proxy_buffering on;—— 必须开启,否则该参数不生效
- proxy_buffer_size 16k;+ proxy_buffers 8 128k;—— 提升内存缓冲总容量(如 1MB),减少落盘概率
- proxy_temp_path /ssd/nginx/proxy_temp 1 2;—— 显式指定 SSD 专用路径,避免与日志争盘
- client_max_body_size 必须 ≥ 该值,否则大请求在代理前就被拦截
上线后验证是否真起效
别只看配置,盯实际行为:
- error log 中是否还有 "an upstream response is buffered to a temporary file" —— 出现说明还在落盘;大量出现且文件持续增长,说明值偏大或缓冲不足
- ls -l /path/to/proxy_temp// | wc -l 查临时文件数量,长期稳定在低位才理想
- iostat -x 1 观察 await 和 %util,高并发下无明显尖刺,说明磁盘压力受控
不复杂但容易忽略











