nginx临时文件需显式配置独立路径并定期按修改时间清理闲置文件,禁用暴力删除,配合cron定时执行+磁盘监控告警。

Nginx 的临时文件(如 client_temp、proxy_temp、fastcgi_temp)不是长期缓存,而是请求处理过程中的中转暂存。它们本该由 Nginx 自动回收,但若配置不当或业务突发,容易堆积占满磁盘。定期自动清理的关键不是“暴力删目录”,而是“精准识别闲置文件 + 安全执行 + 持续监控”。
临时文件路径必须显式配置,不能共用
Nginx 不会自动创建或管理临时目录的生命周期,所有 *_temp_path 都需在 nginx.conf 中单独声明,且建议物理隔离:
-
client_body_temp_path /data/nginx/client_temp 1 2; -
proxy_temp_path /data/nginx/proxy_temp 1 2; -
fastcgi_temp_path /data/nginx/fastcgi_temp 1 2;
每项都必须:
- 使用绝对路径
- 独立挂载(避免和系统盘/缓存盘混用)
- 设置正确权限:
chown -R www-data:www-data /data/nginx/client_temp - 挂载参数加
noatime减少元数据开销
⚠️ 注意:这些路径一旦配置,Nginx 启动时会自动建好子目录结构(如
/a/1f/xxx.tmp),但不会自动清理旧文件——残留文件可能持续数天。
清理策略:只删“真正空闲”的文件,不碰目录结构
直接 rm -rf * 整个 temp 目录极危险:可能误删正在被 worker 进程读写的临时文件,导致 502 或连接中断。应使用 find 按访问时间安全过滤:
-
删除 2 小时以上未访问 的临时文件(适合多数 API/后台服务):
find /data/nginx/proxy_temp -type f -mmin +120 -delete 2>/dev/null
-
同时清理多个 temp 目录(推荐每日执行):
find /data/nginx/{client_temp,proxy_temp,fastcgi_temp} -type f -mmin +120 -delete 2>/dev/null -
执行前可先预览将删哪些文件(调试用):
find /data/nginx/proxy_temp -type f -mmin +120 -ls
✅ 提示:
-mmin +120表示“最后修改时间超过 120 分钟”,比-mtime更精确;-delete安全前提是确保无长连接(如 WebSocket)正在写入该路径。
加入系统级定时任务(cron),不依赖 Nginx 配置
Nginx 本身不支持定时脚本,必须用操作系统调度:
- 编辑 crontab:
sudo crontab -e - 添加一行(每天凌晨 3 点执行):
0 3 * * * find /data/nginx/{client_temp,proxy_temp,fastcgi_temp} -type f -mmin +120 -delete 2>/dev/null - 可选:追加日志记录便于排查
0 3 * * * find /data/nginx/proxy_temp -type f -mmin +120 -print0 | xargs -0 rm -f >> /var/log/nginx/temp_clean.log 2>&1
配合监控与告警,防患于未然
光靠定时清理不够,还需主动感知风险:
- 每 5 分钟检查 temp 目录占用:
df -h /data/nginx | awk 'NR==2 {print $5}' | sed 's/%//' - 若使用 Prometheus + Node Exporter,可采集
node_filesystem_usage_bytes{mountpoint="/data/nginx"}指标 - 磁盘使用率 > 85% 时触发企业微信/钉钉告警
同时建议开启 Nginx 错误日志 debug 级别临时排查(仅调试期):
error_log /var/log/nginx/error.log debug;
搜索 proxy temp file 或 client body temp 关键字,确认落盘是否异常频繁。
不复杂但容易忽略











