优化Debian Apache缓存的第一步是启用mod_cache(缓存框架)和mod_cache_disk(磁盘缓存后端)模块,这是实现缓存功能的基础。在Debian系统中,可通过以下命令启用:
sudo a2enmod cache cache_disk
sudo systemctl restart apache2
配置磁盘缓存目录时,需设置CacheRoot(缓存根目录,默认为/var/cache/apache2)、CacheDirLevels(目录层级,建议2-3层,避免单目录文件过多)和CacheDirLength(目录名长度,建议1-2位,提升检索效率)。示例配置:
<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小时)
</IfModule>
</IfModule>
这些配置需放置在Apache的主配置文件(/etc/apache2/apache2.conf)或虚拟主机配置文件中。
静态资源(图片、CSS、JavaScript等)的缓存是提升性能的关键。通过mod_expires模块设置资源的过期时间,让浏览器直接从本地缓存读取,减少服务器请求。示例配置:
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month" # JPG图片缓存1个月
ExpiresByType text/css "access plus 1 week" # CSS文件缓存1周
ExpiresByType application/javascript "access plus 1 week" # JS文件缓存1周
ExpiresDefault "access plus 1 day" # 其他资源默认缓存1天
</IfModule>
同时,通过mod_headers模块添加Cache-Control头,进一步控制缓存行为(如允许公共缓存、设置最大缓存时间):
<IfModule mod_headers.c>
Header set Cache-Control "public, max-age=86400" # 公共缓存,有效期1天(86400秒)
</IfModule>
需注意,静态资源的Cache-Control和Expires需配合使用,优先级上Cache-Control更高。
对于动态内容(如PHP页面),可通过mod_cache的CacheIgnore系列指令减少不必要的缓存失效,提升缓存命中率。示例配置:
<IfModule mod_cache.c>
<IfModule mod_cache_disk.c>
CacheIgnoreHeaders Set-Cookie # 忽略Set-Cookie头(避免会话信息被缓存)
CacheIgnoreNoLastMod On # 忽略Last-Modified头的缺失(减少验证请求)
CacheIgnoreQueryString On # 忽略查询字符串(如?param=value,避免相同URL不同参数重复缓存)
CacheableMimeType text/html application/json # 允许缓存的动态MIME类型
CacheLockOnPost On # POST请求加锁,避免并发写入缓存
CacheLockPath /tmp/mod_cache_lock # 锁文件路径
CacheLockMaxAge 5 # 锁有效期(5秒)
CacheMaxExpire 86400 # 动态内容最大缓存时间(1天)
CacheMinExpire 600 # 动态内容最小缓存时间(10分钟)
</IfModule>
</IfModule>
这些配置可根据业务需求调整,例如电商网站可将CacheIgnoreQueryString设为Off(保留查询字符串缓存),确保不同参数的页面正确缓存。
缓存后的内容可通过mod_deflate模块压缩,减少网络传输时间(尤其对文本资源如HTML、CSS、JS效果显著)。启用并配置mod_deflate:
sudo a2enmod deflate
配置示例:
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript application/json
</IfModule>
需注意,压缩会增加服务器CPU负载,建议对大文件(如超过10KB的文本资源)启用,小文件可跳过。
缓存策略的效果需结合合理的并发配置才能最大化。调整MaxRequestWorkers(最大并发请求数,根据服务器内存计算,如每进程占用10MB内存,1GB内存可设为100)和KeepAlive(长连接,减少TCP握手开销):
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 1000
</IfModule>
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
这些配置需根据服务器硬件资源和业务流量调整,避免设置过高导致内存耗尽。
定期监控缓存命中率和系统资源使用情况,及时调整配置:
sudo apachectl configtest验证语法是否正确。sudo systemctl restart apache2。apachetop或mod_status模块查看缓存命中情况(需启用ExtendedStatus On)。/var/cache/apache2目录),避免占用过多磁盘空间。