1. 启用并配置核心缓存模块
首先安装并启用mod_cache(缓存核心模块)和mod_cache_disk(磁盘缓存模块),这是Apache缓存的基础。通过以下命令启用:
sudo yum install mod_cache mod_cache_disk # CentOS系统
sudo systemctl restart httpd
在配置文件(如/etc/httpd/conf/httpd.conf或站点配置文件)中添加磁盘缓存规则:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheEnable disk / # 对根路径启用磁盘缓存
CacheRoot "/var/cache/apache2/mod_cache_disk" # 缓存存储目录
CacheDirLevels 2 # 缓存目录层级(避免单目录文件过多)
CacheDirLength 1 # 每级目录名称长度(优化目录结构)
CacheDefaultExpire 3600 # 默认缓存过期时间(1小时)
CacheIgnoreHeaders Set-Cookie # 忽略Set-Cookie头(避免缓存敏感数据)
CacheIgnoreNoLastMod On # 忽略Last-Modified缺失的情况
</IfModule>
</IfModule>
2. 配置静态资源长期缓存
使用mod_expires模块为静态文件(图片、CSS、JS等)设置长期缓存,减少浏览器重复请求。在配置文件中添加:
<IfModule mod_expires.c>
ExpiresActive On # 开启过期头控制
ExpiresByType image/jpeg "access plus 1 month" # JPEG图片缓存1个月
ExpiresByType image/png "access plus 1 month" # PNG图片缓存1个月
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>
同时配合mod_headers设置Cache-Control头,增强缓存控制:
<IfModule mod_headers.c>
<FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
Header set Cache-Control "public, max-age=31536000, immutable" # 公共缓存1年(immutable表示内容不变)
</FilesMatch>
</IfModule>
3. 启用传输压缩优化带宽
使用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>
4. 调整缓存参数优化性能
根据服务器磁盘空间和访问频率调整缓存参数:
mod_cache_disk的CacheMaxSize(最大缓存大小,默认无限制)和CacheMinSize(最小缓存大小)控制:<IfModule mod_cache_disk.c>
CacheMaxSize 104857600 # 最大100MB(根据磁盘空间调整)
CacheMinSize 1048576 # 最小1MB
CacheCleanInterval 3600 # 每小时清理一次过期缓存(单位:秒)
</IfModule>
CacheIgnoreQuery忽略URL查询参数(如?v=1.0),避免相同内容因参数不同重复缓存:CacheIgnoreQuery On
5. 配置KeepAlive提升并发
启用KeepAlive减少TCP连接建立/关闭的开销,提升缓存命中率。在配置文件中添加:
KeepAlive On # 开启KeepAlive
MaxKeepAliveRequests 100 # 单个连接最大请求数(避免单个连接占用过久)
KeepAliveTimeout 5 # 连接保持时间(秒)
6. 监控与维护缓存
curl -I命令查看响应头,确认包含Cache-Control、Expires等头信息:curl -I http://your_server_ip/static/image.jpg
apachectl命令清理过期缓存(无需重启):sudo apachectl cache-flush
mod_status模块(需启用)查看缓存状态,或使用第三方工具(如New Relic)监控缓存性能。7. 可选:使用第三方缓存层
对于高流量网站,可结合Nginx作为反向代理缓存层,进一步提升性能。安装Nginx后配置缓存:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
server {
location /static/ {
proxy_pass http://apache_backend; # 指向Apache服务器
proxy_cache my_cache;
proxy_cache_valid 200 302 1h; # 缓存200/302状态码1小时
proxy_cache_use_stale error timeout updating;
}
}
}