centos

如何使用Apache进行缓存

小樊
39
2025-10-11 03:04:12
栏目: 编程语言

Apache缓存配置指南(以mod_cache+mod_cache_disk为例)

1. 准备工作:启用必要模块

Apache的缓存功能依赖mod_cache(核心缓存框架)和mod_cache_disk(磁盘缓存后端)模块。大多数Linux发行版(如CentOS、Ubuntu)的Apache默认安装这些模块,但需手动启用:

2. 配置全局缓存参数

在Apache配置文件(如httpd.confapache2.confconf.d/cache.conf)中,添加以下基础缓存设置:

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        # 启用磁盘缓存,指定缓存URL路径(如"/static"表示缓存/static目录下的内容)
        CacheEnable disk /static
        
        # 缓存根目录(需确保Apache用户有读写权限,通常设为755或777)
        CacheRoot "/var/cache/httpd/mod_cache_disk"
        
        # 缓存目录结构(2级目录,每级目录名长度为1字符,避免单目录文件过多)
        CacheDirLevels 2
        CacheDirLength 1
        
        # 缓存过期控制
        CacheDefaultExpire 3600       # 默认过期时间(1小时,未指定Expires/Cache-Control时生效)
        CacheMaxExpire 86400          # 最大过期时间(1天,避免缓存过久)
        CacheMinExpire 60             # 最小过期时间(1分钟,避免频繁更新)
        
        # 其他优化参数
        CacheIgnoreHeaders Set-Cookie # 忽略Set-Cookie头,防止缓存动态内容(如登录状态)
        CacheIgnoreNoLastMod On       # 忽略无Last-Modified头的资源(强制缓存)
        CacheLockPath /var/lock/httpd/mod_cache_lock  # 缓存锁路径(避免并发写入冲突)
        CacheLockMaxAge 5             # 缓存锁最大存活时间(5秒)
    </IfModule>
</IfModule>

关键参数说明

3. 针对特定目录/文件类型细化缓存规则

若需为不同类型的资源设置不同缓存策略,可使用<Directory><Files><Location>指令。例如,缓存/static/images目录下的图片(延长过期时间):

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        <Directory "/var/www/html/static/images">
            CacheEnable disk /static/images
            CacheDefaultExpire 86400    # 默认1CacheMaxExpire 604800       # 最大1CacheIgnoreQueryString On   # 忽略URL查询字符串(如image.jpg?version=1),避免重复缓存
        </Directory>
    </IfModule>
</IfModule>

或缓存所有.jpg.png.css.js文件:

<FilesMatch "\.(jpg|jpeg|png|css|js)$">
    <IfModule mod_cache.c>
        CacheEnable disk /
        CacheDefaultExpire 3600
    </IfModule>
</FilesMatch>

4. 结合mod_expires设置HTTP缓存头

mod_expires模块可自动生成ExpiresCache-Control头,进一步规范浏览器缓存行为。启用并配置如下:

效果:浏览器会根据ExpiresCache-Control头自动缓存资源,减少对服务器的请求。

5. 重启Apache使配置生效

完成所有配置后,重启Apache服务:

6. 验证缓存是否生效

使用curl命令检查响应头,确认是否包含Cache-ControlExpires头:

curl -I http://yourwebsite.com/static/image.jpg

预期结果:应看到类似以下响应头,表示缓存生效:

HTTP/1.1 200 OK
Date: Wed, 10 Oct 2025 08:00:00 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Wed, 03 Oct 2025 08:00:00 GMT
ETag: "34aa387-d-1568eb00"
Cache-Control: max-age=3600, public
Expires: Wed, 10 Oct 2025 09:00:00 GMT

Cache-Control中包含publicmax-age,且Expires为未来时间,则说明缓存配置成功。

注意事项

0
看了该问题的人还看了