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,确保缓存内容的新鲜度。