Apache不直接记录缓存状态,但可通过启用mod_cache、mod_cache_disk和mod_headers模块,配置X-Cache响应头与自定义LogFormat(含%{X-Cache}o或%{cache-status}e),将HIT/MISS等状态写入access.log,实现缓存行为可观测。

Apache 本身不直接记录“缓存命中/未命中”状态到标准 access.log 或 error.log,但可通过启用 mod_cache 的日志功能并配合自定义日志格式,把缓存行为(如 HIT、MISS、REVALIDATE)显式写入访问日志,从而支撑后续运维分析。
启用 cache 日志模块并配置缓存状态头
Apache 的缓存状态信息(如 X-Cache: HIT)需由 mod_cache 模块生成,并通过响应头暴露。先确保已启用相关模块:
-
sudo a2enmod cache cache_disk headers(Debian/Ubuntu)或手动取消httpd.conf中LoadModule cache_module等行的注释 - 重启服务:
sudo systemctl restart apache2
然后在虚拟主机或全局配置中添加:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /
CacheRoot "/var/cache/apache2/mod_cache_disk"
CacheIgnoreHeaders Set-Cookie
CacheDefaultExpire 3600
</IfModule>
</IfModule>关键一步:用 Header 指令将缓存状态注入响应头,便于日志捕获:
<IfModule mod_headers.c>
Header append X-Cache "%{cache-status}e" env=cache-status
</IfModule>扩展日志格式,记录缓存状态字段
默认日志不含缓存信息。需自定义 LogFormat,在 httpd.conf 或站点配置中添加:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Cache}o" combined_with_cache其中 %{X-Cache}o 表示从响应头(output header)中提取 X-Cache 值;combined_with_cache 是新格式名。
再将该格式应用到日志指令:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
CustomLog ${APACHE_LOG_DIR}/access.log combined_with_cache重启后,每条日志末尾会多出一列,例如:
192.168.1.100 - - [06/Jun/2026:04:20:15 +0000] "GET /static/logo.png HTTP/1.1" 200 12452 "-" "Mozilla/5.0" HIT验证与常见问题处理
确认缓存状态是否生效,可手动请求并检查响应头:
-
curl -I https://yoursite.com/static/style.css→ 查看是否含X-Cache: HIT或MISS - 若始终为
MISS,检查资源是否被CacheIgnoreHeaders Set-Cookie或no-cache响应头拦截 - 若日志中该字段为空,确认
mod_headers已启用,且Header append的环境变量cache-status被正确设置(部分 Apache 版本需配合SetEnvIf或使用mod_cache内置变量)
更可靠的方式(推荐 Apache 2.4.37+)是直接使用内置缓存变量:
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{cache-status}e" combined_with_cache此时无需额外 Header append,%{cache-status}e 由 mod_cache 自动提供,值为 HIT、MISS、REVALIDATE 或 BYPASS。
结合日志分析定位缓存效率问题
有了带缓存状态的日志,就能用简单命令快速评估缓存效果:
- 统计命中率:
awk '{print $12}' /var/log/apache2/access.log | sort | uniq -c | sort -nr - 查看哪些路径缓存效果差(MISS 高):
awk '$12=="MISS" {print $7}' /var/log/apache2/access.log | sort | uniq -c | sort -nr | head -10 - 排查未缓存原因:筛选
BYPASS行,检查对应请求是否含Cookie、Authorization或动态查询参数
这样就把缓存行为从“黑盒”变为可观测指标,为容量规划、规则调优和故障归因提供直接依据。

















