Apache正向代理无自动清理缓存机制,需通过cron定时停服清空、logrotate轮转或磁盘监控脚本触发清理,严禁直接删除单个缓存文件。

Apache 正向代理本身不提供内置的“定期自动清理缓存文件”机制,磁盘缓存(mod_cache_disk)不会主动删除过期文件,仅在请求命中时检查 TTL 并跳过使用;未被访问的过期缓存会一直留在磁盘上,长期运行易导致空间耗尽。必须通过外部手段配合实现周期性清理。
手动清理缓存目录需谨慎操作
mod_cache_disk 的缓存文件由哈希路径管理(如 /var/cache/apache2/proxy/01/23/abc123...dat),不能直接用 find + rm 删除单个文件,否则可能破坏索引、引发 503 错误或后续请求失败。安全做法是:
- 停止 Apache 服务(
systemctl stop httpd或apachectl stop) - 清空整个缓存根目录(如
rm -rf /var/cache/apache2/proxy/*) - 重启服务(
systemctl start httpd)——启动时会重建索引结构
用系统定时任务(cron)实现定期全量清理
这是最常用、最稳妥的定期清理方式,适合局域网内低频更新、可接受短时缓存清空的场景(如软件源镜像、文档站点加速):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 编辑 root 的 crontab:
sudo crontab -e - 添加一行(例如每周日凌晨2点执行):
0 2 * * 0 /bin/systemctl stop httpd && /bin/rm -rf /var/cache/apache2/proxy/* && /bin/systemctl start httpd - 确保
/var/cache/apache2/proxy目录存在且权限正确(chown apache:apache /var/cache/apache2/proxy)
用 logrotate 管理缓存目录(推荐进阶方案)
logrotate 原生支持按大小/时间轮转目录,比 cron 更精细,且无需停服(但注意:mod_cache_disk 不支持热重载缓存目录,仍需重启 Apache 才能生效新目录):
- 新建配置:
/etc/logrotate.d/apache-proxy-cache - 内容示例:
/var/cache/apache2/proxy {<br> daily<br> rotate 1<br> missingok<br> sharedscripts<br> postrotate<br> systemctl restart httpd 2>/dev/null || true<br> endscript<br>} - 该配置每天轮转一次,保留1份旧缓存(实际为清空后重建),并自动重启服务
监控磁盘使用并触发条件清理
避免被动等到写满,建议加一层主动防护:
- 用
df -h /var或du -sh /var/cache/apache2/proxy定期检查 - 写简单脚本判断缓存目录是否超阈值(如 >80%):
if [ $(du -s /var/cache/apache2/proxy | cut -f1) -gt 10485760 ]; then ...restart+clean... - 将脚本加入 cron 每小时运行一次,配合邮件或日志告警

















