proxy_max_temp_file_size 限制nginx代理时单个临时磁盘文件最大大小,仅在proxy_buffering on且响应体超出内存缓冲(proxy_buffer_size+proxy_buffers总和)时生效;设为0禁用磁盘缓存,1m–10m为常用平衡值,需配合proxy_max_temp_files、proxy_temp_path等协同配置。

proxy_max_temp_file_size 是 Nginx 代理模块中用于限制后端响应体写入临时文件时单个临时文件最大大小的指令,它**只在启用磁盘缓存(即 response body 被缓冲到磁盘)时生效**,且必须配合 proxy_buffering on 和 proxy_max_temp_files 使用。它不控制内存缓冲区大小,也不影响请求体(如上传)的临时文件——那是 client_max_body_size 和 client_body_buffer_size 的职责。
什么时候会用到 proxy_max_temp_file_size?
当 Nginx 作为反向代理接收后端响应时:
- 若响应体超过
proxy_buffer_size+proxy_buffers总和,Nginx 会把超出部分写入临时文件; - 若启用了
proxy_buffering on(默认开启),且响应不可缓存或未命中缓存,Nginx 可能边收边转,但大响应仍需暂存; - 此时
proxy_max_temp_file_size控制每个临时文件的最大容量(比如设为 1M,就最多生成多个 1MB 文件,而非一个超大文件)。
如何正确配置?
该指令只能出现在 http、server 或 location 块中,语法为:
常见合理取值:
-
0:禁用磁盘临时文件,强制所有响应缓冲在内存中(风险高,易 OOM); -
1m~10m:适合多数场景,平衡内存与磁盘使用; - 不建议设得过大(如 100m+),否则单个大文件可能拖慢 I/O 或填满临时目录。
⚠️ 注意:它必须与 proxy_max_temp_files 配合使用。例如:
proxy_buffer_size 4k;
proxy_buffers 8 64k;
proxy_max_temp_file_size 2m;
proxy_max_temp_files 100;
表示最多用 100 个临时文件,每个不超过 2MB,总磁盘缓存上限约 200MB(实际受 OS 限制和可用空间约束)。
怎么确认是否生效?
没有直接日志开关显示“用了多少临时文件”,但可通过以下方式间接验证:
- 查看
error.log中是否有upstream sent too big header(这是 buffer 不足,不是 temp file 问题); - 监控代理节点的
/var/lib/nginx/proxy/(或你配置的proxy_temp_path)目录下文件数量和大小变化; - 用
strace -e trace=openat,write -p $(pidof nginx)观察是否频繁写入 proxy_temp 目录下的文件。
常见误区提醒
- 它和
proxy_buffer_size/proxy_buffers是协同关系,不是替代关系; - 设为
0并不等于“禁用缓存”,而是禁止落盘,所有数据强压进内存缓冲区,容易触发502 Bad Gateway; - 修改后必须
nginx -t && nginx -s reload,且确保proxy_temp_path所在分区有足够空间和写权限。











