centos

centos apache2缓存配置技巧

小樊
44
2025-09-26 10:51:08
栏目: 智能运维

1. 启用必要缓存模块
在CentOS上,Apache2的缓存功能依赖mod_cache(核心缓存框架)、mod_cache_disk(磁盘缓存后端)和mod_expires(过期时间控制)模块。首先通过YUM安装这些模块:

sudo yum install mod_cache mod_cache_disk mod_expires

安装完成后,在Apache配置文件(如/etc/httpd/conf/httpd.conf/etc/httpd/conf.d/cache.conf)中启用模块(CentOS 7及以上版本模块通常通过conf.modules.d目录下的.conf文件启用,无需手动编辑主配置文件):

LoadModule cache_module modules/mod_cache.so
LoadModule cache_disk_module modules/mod_cache_disk.so
LoadModule expires_module modules/mod_expires.so

重启Apache使模块生效:

sudo systemctl restart httpd

2. 配置磁盘缓存(核心静态内容缓存)
磁盘缓存是Apache2最常用的缓存方式,适用于静态资源(如CSS、JS、图片)。在配置文件中添加以下内容:

<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        # 启用磁盘缓存,指定缓存路径(可自定义)
        CacheEnable disk /static
        # 缓存根目录(需确保Apache有读写权限)
        CacheRoot "/var/cache/apache2/mod_cache_disk"
        # 缓存目录结构:2级子目录,每级目录名长度为1(优化IO性能)
        CacheDirLevels 2
        CacheDirLength 1
        # 默认过期时间(1小时)
        CacheDefaultExpire 3600
        # 最大过期时间(1天,避免长期不更新)
        CacheMaxExpire 86400
        # 忽略Set-Cookie头(防止缓存带会话信息的页面)
        CacheIgnoreHeaders Set-Cookie
        # 即使资源未修改,也允许缓存(减少回源请求)
        CacheIgnoreNoLastMod On
    </IfModule>
</IfModule>

注意/static是缓存路径前缀,可根据需求修改(如/images/js);CacheRoot目录需手动创建并赋予权限:

sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R apache:apache /var/cache/apache2/mod_cache_disk

3. 设置过期时间(精准控制缓存策略)
通过mod_expires模块为不同文件类型设置过期时间,让浏览器主动缓存资源,减少服务器请求。在配置文件中添加:

<IfModule mod_expires.c>
    # 启用过期时间控制
    ExpiresActive On
    # 默认过期时间(1年,适用于长期不变的静态资源)
    ExpiresDefault "access plus 1 year"
    # HTML文件(1小时,适合频繁更新的页面)
    ExpiresByType text/html "access plus 1 hour"
    # CSS/JS文件(1周)
    ExpiresByType text/css "access plus 1 week"
    ExpiresByType application/javascript "access plus 1 week"
    # 图片文件(1个月)
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
</IfModule>

配置后,Apache会在响应头中添加ExpiresCache-Control字段,告知浏览器资源的过期时间。

4. 启用压缩(减少传输体积)
使用mod_deflate模块压缩文本内容(HTML、CSS、JS),降低带宽占用,提升加载速度。在配置文件中添加:

<IfModule mod_deflate.c>
    # 压缩以下类型的文件
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
    # 排除IE6(兼容性问题)
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
</IfModule>

重启Apache后,响应头中会出现Content-Encoding: gzip,表示内容已压缩。

5. 优化KeepAlive(减少连接开销)
KeepAlive允许客户端在一个TCP连接上发送多个请求,减少连接建立和关闭的时间。在配置文件中调整:

# 启用KeepAlive
KeepAlive On
# 每个连接最大请求数(避免单个连接占用过多资源)
MaxKeepAliveRequests 100
# 连接超时时间(5秒,平衡响应速度和资源占用)
KeepAliveTimeout 5

此配置能显著提升并发请求的处理效率,尤其适合静态资源较多的网站。

6. 验证缓存配置
使用curl命令检查响应头,确认缓存是否生效:

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

若看到以下头部信息,说明缓存配置成功:

HTTP/1.1 200 OK
Cache-Control: max-age=31536000, public
Expires: Thu, 21 Oct 2026 07:28:00 GMT
Content-Encoding: gzip

其中Cache-ControlExpires字段表示浏览器缓存策略,Content-Encoding: gzip表示内容已压缩。

注意事项

0
看了该问题的人还看了