Ubuntu Apache缓存机制设置指南
Apache的缓存机制主要通过mod_cache(缓存核心模块)和mod_cache_disk(磁盘缓存存储模块)实现,以下是详细配置步骤及关键参数说明:
首先确保系统已安装mod_cache和mod_cache_disk模块(Ubuntu默认可能未启用,但包通常已存在):
sudo apt update
sudo apt install apache2-mod-cache apache2-mod-cache-disk
使用a2enmod命令启用模块,使Apache加载缓存功能:
sudo a2enmod cache
sudo a2enmod cache_disk
sudo systemctl restart apache2 # 重启Apache使模块生效
缓存配置需添加到Apache配置文件中,可选择全局配置(影响所有站点)或虚拟主机配置(仅影响特定站点):
创建或编辑/etc/apache2/conf-available/cache.conf(Debian/Ubuntu推荐方式),添加以下内容:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
# 启用磁盘缓存,应用于根路径(可根据需求修改为特定路径,如/static/)
CacheEnable disk /
# 指定缓存文件存储目录(默认路径,无需修改)
CacheRoot /var/cache/apache2/mod_cache_disk
# 缓存目录结构设置(层级数+每层子目录数,优化IO性能)
CacheDirLevels 2
CacheDirLength 1
# 缓存过期时间控制
CacheDefaultExpire 3600 # 默认过期时间(1小时)
CacheMaxExpire 86400 # 最大过期时间(1天)
CacheMinExpire 60 # 最小过期时间(1分钟)
CacheLastModifiedFactor 0.5 # 最后修改时间权重(0~1,值越大越依赖修改时间)
# 忽略敏感头信息(避免缓存动态内容)
CacheIgnoreHeaders Set-Cookie
CacheIgnoreNoLastMod On # 忽略Last-Modified头(依赖其他机制)
CacheIgnoreHeaders Expires
CacheIgnoreHeaders Cache-Control
CacheIgnoreHeaders Pragma
# 缓存存储策略(根据需求调整)
CacheStoreNoStore On # 不存储Cache-Control: no-store的响应
CacheStorePrivate On # 存储私有响应(如用户会话)
CacheStoreRevalidate On # 启用重新验证(确保缓存新鲜度)
CacheValidate On # 强制验证缓存有效性
CacheCleanInterval 300 # 缓存清理间隔(秒,可选)
</IfModule>
</IfModule>
若仅需为某个虚拟主机启用缓存,编辑对应的配置文件(如/etc/apache2/sites-available/000-default.conf),在<VirtualHost>块内添加:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk /
CacheRoot /var/cache/apache2/mod_cache_disk
CacheDirLevels 2
CacheDirLength 1
CacheDefaultExpire 3600
</IfModule>
</IfModule>
缓存目录需由Apache用户(www-data)拥有读写权限:
sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R www-data:www-data /var/cache/apache2/mod_cache_disk
sudo chmod -R 755 /var/cache/apache2/mod_cache_disk
若使用conf-available目录配置,需启用配置文件:
sudo a2enconf cache # 启用cache.conf配置
sudo systemctl restart apache2 # 重启Apache应用更改
使用curl命令检查响应头,确认缓存是否工作:
curl -I http://your-website.com
若返回结果中包含X-Cache: HIT或Cache-Control: max-age=3600,则表示缓存生效(HIT表示缓存命中)。
| 参数 | 作用 | 推荐值 |
|---|---|---|
CacheEnable disk / |
启用磁盘缓存,/表示应用于所有路径 |
根据需求修改(如/static/仅缓存静态资源) |
CacheRoot |
缓存文件存储目录 | 默认/var/cache/apache2/mod_cache_disk |
CacheDirLevels |
缓存目录层级数(优化IO) | 2~3(层级越多,目录分布越均匀) |
CacheDirLength |
每层子目录的最大数量 | 1~2(避免单个目录文件过多) |
CacheDefaultExpire |
默认缓存过期时间(秒) | 3600(1小时) |
CacheMaxExpire |
最大缓存过期时间(秒) | 86400(1天) |
CacheIgnoreHeaders Set-Cookie |
忽略Set-Cookie头(避免缓存动态会话) |
必须开启 |
CacheStorePrivate On |
存储私有响应(如用户登录页) | 根据需求开启 |
www-data用户对CacheRoot目录有写权限,否则会导致缓存失败。Set-Cookie、Authorization等头信息的页面(如登录页),需通过CacheIgnoreHeaders忽略。CacheDirLevels和CacheDirLength需根据服务器存储性能调整(层级过多会影响查找速度,过少会导致单目录文件过多)。CacheValidate On或CacheRevalidate On,确保缓存内容的新鲜度。