优化Apache缓存的目的是减少服务器负载、降低带宽消耗、提高页面加载速度。以下是针对CentOS系统的具体优化步骤,涵盖模块配置、缓存策略、压缩与连接优化等方面:
Apache的缓存功能依赖mod_cache(缓存框架)和mod_cache_disk(磁盘缓存后端)。首先通过YUM安装模块:
sudo yum install mod_cache mod_cache_disk
编辑Apache主配置文件(/etc/httpd/conf/httpd.conf或站点配置文件如/etc/httpd/conf.d/your_site.conf),添加以下配置:
<IfModule mod_cache.c>
    <IfModule mod_cache_disk.c>
        CacheEnable disk /  # 对根路径启用磁盘缓存
        CacheRoot "/var/cache/apache2/mod_cache_disk"  # 缓存存储目录
        CacheDirLevels 2  # 缓存目录层级(避免单目录文件过多)
        CacheDirLength 1  # 每层目录名长度(1-255)
        CacheDefaultExpire 3600  # 默认缓存过期时间(秒,1小时)
        CacheIgnoreHeaders Set-Cookie  # 忽略Set-Cookie头(避免缓存带Cookie的动态内容)
        CacheIgnoreNoLastMod On  # 忽略Last-Modified头缺失的情况(强制缓存)
    </IfModule>
</IfModule>
说明:CacheRoot目录需提前创建并赋予Apache用户(apache或httpd)读写权限:
sudo mkdir -p /var/cache/apache2/mod_cache_disk
sudo chown -R apache:apache /var/cache/apache2/mod_cache_disk
静态文件(图片、CSS、JS等)变化频率低,适合设置较长缓存时间。使用mod_expires模块(需安装:sudo yum install mod_expires),在配置文件中添加:
<IfModule mod_expires.c>
    ExpiresActive On  # 开启过期时间控制
    ExpiresByType image/jpg "access plus 1 year"  # JPG图片缓存1年
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType image/gif "access plus 1 year"
    ExpiresByType text/css "access plus 1 week"  # CSS文件缓存1周
    ExpiresByType application/javascript "access plus 1 week"  # JS文件缓存1周
    ExpiresByType text/html "access plus 1 hour"  # HTML缓存1小时(动态内容可缩短)
</IfModule>
验证:通过curl -I http://your_server_ip/image.jpg查看响应头,确认包含Expires和Cache-Control字段(如Cache-Control: max-age=31536000, public)。
使用mod_deflate模块(默认安装)压缩文本类内容(HTML、CSS、JS),降低带宽占用。在配置文件中添加:
<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
注意:避免压缩图片、视频等二进制文件(已通过mod_expires缓存),以免增加CPU负担。
KeepAlive允许客户端在单个TCP连接上发送多个请求,减少连接建立/关闭的开销。在配置文件中添加:
KeepAlive On  # 开启KeepAlive
MaxKeepAliveRequests 100  # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5  # 连接保持时间(秒,5-15秒为宜)
通过Apache的状态模块(mod_status)监控缓存命中率。首先启用状态页:
<Location "/server-status">
    SetHandler server-status
    Require ip 127.0.0.1  # 仅允许本地访问(生产环境可限制IP段)
</Location>
ExtendedStatus On
重启Apache后,访问http://your_server_ip/server-status查看CacheHitRatio(缓存命中率)。若命中率低,可调整:
CacheDefaultExpire:延长默认过期时间(需权衡缓存新鲜度);CacheMaxExpire:设置单个内容的最大缓存时间(避免长期缓存过时内容)。对于高流量站点,Apache自带的磁盘缓存可能无法满足需求,可部署Varnish作为反向代理缓存。Varnish基于内存缓存,性能远高于磁盘缓存,但配置复杂度更高。基本步骤:
sudo yum install varnish
编辑Varnish配置文件(/etc/varnish/default.vcl),设置后端为Apache:
backend default {
    .host = "127.0.0.1";
    .port = "8080";  # Apache需监听8080端口(修改/etc/httpd/conf/httpd.conf中的Listen)
}
启动Varnish并设置开机自启:
sudo systemctl start varnish
sudo systemctl enable varnish
CacheIgnoreHeaders Set-Cookie或CacheIgnoreNoLastMod On排除,避免缓存错误数据;/static),可将CacheEnable disk /改为CacheEnable disk /static;warn或error(LogLevel warn),减少日志写入对性能的影响。通过以上步骤,可显著提升CentOS上Apache的缓存效率,改善网站性能。根据实际业务需求调整缓存时间和策略,平衡缓存命中率与数据新鲜度。