可提前发现大文件上传引发的磁盘爆满风险,关键在于监控磁盘占用与文件实际大小的差值、nginx临时目录io速率与文件增长、client_max_body_size配置容量预估、以及proxy_cache_path与proxy_temp_path是否共用磁盘。

直接看磁盘使用率和 Nginx 临时文件写入行为,就能提前发现大文件上传引发的磁盘爆满风险。关键不是等空间告急,而是盯住几个可量化的异常信号。
盯住磁盘占用与文件实际大小的差值
这是最典型的“假性满盘”信号。执行以下命令对比:
-
df -h:显示挂载点整体使用率(比如
/data占用 98%) - du -sh /data/nginx/*:统计目录下可见文件总大小(可能只显示 20G)
- 若两者相差巨大(如 df 显示 200G 占用,du 只算出 5G),说明有已删除但未释放的文件句柄
- 立即运行
lsof +L1 | grep nginx,确认是否是 Nginx worker 进程仍在持有proxy_temp或client_body_temp下的 deleted 文件
监控 Nginx 临时目录的 IO 和文件增长速率
大文件上传会高频写入临时目录,这个行为比日志更隐蔽、更危险:
- 用
iotop -p $(pgrep nginx)观察 Nginx worker 进程的实时写入速度,持续 >100MB/s 就需警惕 - 定时采样:
find /data/nginx/proxy_temp -type f -mmin -5 | wc -l,5 分钟内新增数百个临时文件,基本可判定正在处理大量大文件上传 - 检查
proxy_temp_path和client_body_temp_path所在分区,确保其独立于系统盘(避免影响 ssh 登录等基础服务)
结合 client_max_body_size 配置做容量预估
上传限制不是安全阀,而是容量规划依据:
- 查当前生效值:
nginx -T 2>/dev/null | grep client_max_body_size,注意 location > server > http 的优先级 - 若配置为
2G,且并发上传用户达 100,则理论最大临时磁盘占用 = 2G × 100 = 200G(未考虑清理机制) - 必须同步检查
proxy_max_temp_file_size(默认 1024M)和client_body_buffer_size(内存缓冲上限),防止小文件也落盘堆积 - 对可信内网场景,宁可设
client_max_body_size 0(不限制),也要配好max_size和inactive清理策略
验证缓存与临时文件是否共用同一磁盘
proxy_cache_path 的 max_size 是硬限制,但 proxy_temp_path 没有自动清理机制:
- 检查
proxy_cache_path是否也落在/data分区;若与proxy_temp_path同盘,缓存增长 + 上传临时文件 = 双重压力 - 强制分离路径:把
proxy_temp_path /tmp/nginx_temp(内存盘或独立 SSD),proxy_cache_path /data/nginx/cache max_size=5g - 加上
use_temp_path=off(要求 Nginx ≥ 1.7.12),让代理响应直接进缓存区,跳过临时文件阶段











