Apache HTTP Server 不主动清理过期缓存,而是依赖 Cache-Control、Expires 等响应头控制缓存有效期,并通过 ETag/Last-Modified 实现协商验证;mod_cache 的磁盘缓存失效由响应头驱动,动态内容需显式禁用缓存。
apache http server 本身不主动“清理”过期缓存数据,而是通过缓存策略控制何时不再使用缓存、何时向后端验证或重新获取资源。真正的“失效管理”体现在响应头控制 + 模块行为协同上,不是后台定时删文件。
用 Cache-Control 和 Expires 设置强缓存有效期
这是最直接的失效控制方式,告诉浏览器和中间代理(如 Apache 自身的 mod_cache 或前置 CDN)资源在多长时间内可直接复用:
- Cache-Control: max-age=3600 表示资源从响应发出起 1 小时内无需再请求源服务器
-
Cache-Control: public, immutable 适合指纹化静态资源(如
app.a1b2c3.js),明确禁止重验证 -
Expires: "access plus 1 month" 是旧式绝对时间写法,建议优先用
Cache-Control,兼容性更好
用 ETag 和 Last-Modified 实现协商缓存验证
当强缓存过期后,浏览器会发条件请求,Apache 需配合返回校验依据,让客户端判断是否仍可用本地副本:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_headers和mod_expires后,Apache 默认对静态文件自动设置Last-Modified - 开启
FileETag INode MTime Size(默认已开),Apache 会为每个文件生成ETag,基于 inode、修改时间和大小组合计算 - 客户端下次带
If-None-Match或If-Modified-Since请求,Apache 自动比对并返回304 Not Modified
配合 mod_cache 做服务端磁盘缓存时的失效逻辑
若启用 mod_cache + mod_cache_disk,Apache 会在磁盘保存响应副本,其失效由响应头驱动,不依赖轮询:
- 收到带
Cache-Control: no-cache或max-age=0的请求,Apache 不用缓存,直接回源 - 响应中含
Cache-Control: s-maxage=1800,则代理层(包括 Apache 自身)按此时间判断缓存新鲜度 - 手动清除可执行
sudo rm -rf /var/cache/apache2/mod_cache_disk/*,但生产环境应靠头信息自动管理,避免人工干预
动态内容需显式绕过缓存
含用户状态、实时数据的响应必须防止被缓存,否则会导致数据错乱:
- PHP/Java 应用返回前加
header("Cache-Control: private, no-store, must-revalidate"); - Apache 配置中可用
SetEnvIf标记敏感路径,再用CacheIgnoreHeaders或CacheDisable屏蔽缓存 - 例如:匹配
/api/user/profile路径,强制禁用缓存模块处理

















