apache动态内容缓存的核心目标是将后端生成的响应临时存储,使相同请求直接返回缓存结果而不调用后端,从而显著降低cpu、数据库和应用负载;需启用mod_cache与mod_cache_disk协同工作,配置cacheroot、cacheenable、cacheignoreheaders等指令,并通过x-cache响应头验证命中。

Apache 动态内容缓存的核心目标是:把原本每次都要交由后端(如 PHP、Python 应用或数据库)生成的响应,临时存下来,下次相同请求直接返回缓存结果——不走后端,从而显著降低 CPU、数据库连接和应用进程负载。
启用并配置 mod_cache_disk 实现磁盘缓存
动态内容缓存依赖 mod_cache 和 mod_cache_disk 两个模块协同工作,前者提供缓存逻辑框架,后者负责将响应持久化到磁盘。
- 启用模块:
sudo a2enmod cache cache_disk headers expires - 创建缓存目录并授权:
sudo mkdir -p /var/cache/apache2/mod_cache_disksudo chown www-data:www-data /var/cache/apache2/mod_cache_disksudo chmod 750 /var/cache/apache2/mod_cache_disk - 在主配置或虚拟主机中添加基础缓存设置:
CacheRoot /var/cache/apache2/mod_cache_disk
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
精准控制哪些动态响应可被缓存
不是所有动态页面都适合缓存。关键在于排除含用户状态、敏感信息或频繁变更的内容,只缓存“准静态”响应(如首页、分类页、文章详情页等更新不频繁的 GET 请求)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 忽略 Set-Cookie 响应头(防止缓存登录态):
CacheIgnoreHeaders Set-Cookie - 跳过无 Last-Modified 或 ETag 的响应(避免缓存不可验证内容):
CacheIgnoreNoLastMod On - 仅对特定路径启用缓存,例如只缓存
/blog/和/products/下的页面:
CacheEnable disk /
CacheDefaultExpire 1800
CacheEnable disk /
CacheDefaultExpire 3600
设置合理缓存时效与验证机制
动态内容不能永久缓存,但也不必每次刷新。通过 CacheDefaultExpire、CacheMaxExpire 和响应头配合,实现安全又高效的时效控制。
-
CacheDefaultExpire 1800:默认缓存 30 分钟(适用于多数列表页) -
CacheMaxExpire 86400:最长不超过 24 小时(防缓存长期失效) - 搭配
mod_expires设置响应头,让代理和浏览器也知晓缓存策略:
ExpiresActive On
ExpiresByType text/html "access plus 30 minutes" - 启用
CacheLastModifiedFactor 0.1可基于 Last-Modified 时间自动推算过期时间(例如响应头含Last-Modified: Wed, 01 Jan 2025 12:00:00 GMT,则缓存约 2.4 小时)
验证缓存是否生效
配置完成后,必须确认缓存真正起作用,而非“看起来配了”。最可靠方式是检查响应头和日志。
- 使用 curl 查看响应头:
curl -I https://yoursite.com/blog/latest,成功时应看到类似:X-Cache: HIT from example.com或X-Cache-Detail: cached(取决于自定义日志格式) - 开启 Apache 缓存日志辅助调试(可选):
CacheLockPath /tmp/mod_cache_lock
并在日志中添加:LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{X-Cache}o" combined-cache - 注意:首次访问为
MISS,第二次相同请求应为HIT;若始终为MISSED,需检查是否被Set-Cookie、Vary头或 POST 方法拦截










