如何使用Apache进行缓存
导读:Apache缓存配置指南(以mod_cache+mod_cache_disk为例) 1. 准备工作:启用必要模块 Apache的缓存功能依赖mod_cache(核心缓存框架)和mod_cache_disk(磁盘缓存后端)模块。大多数Linu...
Apache缓存配置指南(以mod_cache+mod_cache_disk为例)
1. 准备工作:启用必要模块
Apache的缓存功能依赖mod_cache
(核心缓存框架)和mod_cache_disk
(磁盘缓存后端)模块。大多数Linux发行版(如CentOS、Ubuntu)的Apache默认安装这些模块,但需手动启用:
- CentOS/RHEL:使用
yum
安装模块并启用:sudo yum install mod_cache mod_cache_disk sudo systemctl enable httpd & & sudo systemctl restart httpd
- Ubuntu/Debian:使用
a2enmod
启用模块并重启Apache:sudo a2enmod cache cache_disk sudo systemctl restart apache2
- 手动配置:若模块未自动加载,在Apache主配置文件(
httpd.conf
或apache2.conf
)中取消以下行注释:LoadModule cache_module modules/mod_cache.so LoadModule cache_disk_module modules/mod_cache_disk.so
2. 配置全局缓存参数
在Apache配置文件(如httpd.conf
、apache2.conf
或conf.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>
关键参数说明:
CacheEnable disk /static
:仅缓存/static
路径下的内容(如图片、CSS、JS),避免缓存动态页面(如/index.php
)。CacheRoot
:缓存文件存储目录,需提前创建并赋予权限:sudo mkdir -p /var/cache/httpd/mod_cache_disk sudo chown -R apache:apache /var/cache/httpd/mod_cache_disk # Apache用户组通常为apache或www-data
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 # 默认1天
CacheMaxExpire 604800 # 最大1周
CacheIgnoreQueryString 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
模块可自动生成Expires
和Cache-Control
头,进一步规范浏览器缓存行为。启用并配置如下:
- 启用模块(Ubuntu/Debian):
sudo a2enmod expires sudo systemctl restart apache2
- 配置示例(添加到Apache配置文件中):
< IfModule mod_expires.c> ExpiresActive On # 开启Expires功能 ExpiresByType text/html "access plus 1 hour" # HTML文件1小时过期 ExpiresByType image/jpeg "access plus 1 week" # JPEG图片1周过期 ExpiresByType image/png "access plus 1 week" # PNG图片1周过期 ExpiresByType application/javascript "access plus 1 month" # JS文件1个月过期 ExpiresByType text/css "access plus 1 month" # CSS文件1个月过期 < /IfModule>
效果:浏览器会根据Expires
或Cache-Control
头自动缓存资源,减少对服务器的请求。
5. 重启Apache使配置生效
完成所有配置后,重启Apache服务:
- CentOS/RHEL:
sudo systemctl restart httpd
- Ubuntu/Debian:
sudo systemctl restart apache2
6. 验证缓存是否生效
使用curl
命令检查响应头,确认是否包含Cache-Control
或Expires
头:
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
中包含public
或max-age
,且Expires
为未来时间,则说明缓存配置成功。
注意事项
- 缓存目录权限:确保
CacheRoot
目录的权限正确(Apache用户可读写),否则会导致缓存失败。 - 动态内容排除:避免缓存包含
Set-Cookie
、Authorization
头的动态页面(如登录页面),可通过CacheIgnoreHeaders
指令实现。 - 缓存清理:Apache不会自动清理过期缓存,需定期手动删除
CacheRoot
目录下的旧文件(可通过cron
任务自动化)。 - 内存缓存优化:若需更快的缓存(如缓存频繁访问的小文件),可结合
mod_mem_cache
模块(需调整MCacheSize
、MCacheMaxObjectSize
等参数)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何使用Apache进行缓存
本文地址: https://pptw.com/jishu/723447.html