CentOS Apache缓存策略
导读:CentOS 上 Apache 缓存策略实践指南 一 缓存类型与适用场景 HTTP 内容缓存(mod_cache + mod_disk_cache/mod_mem_cache):基于 URI 的键存储,可缓存本地或反向代理内容,适用于高命...
CentOS 上 Apache 缓存策略实践指南
一 缓存类型与适用场景
- HTTP 内容缓存(mod_cache + mod_disk_cache/mod_mem_cache):基于 URI 的键存储,可缓存本地或反向代理内容,适用于高命中、可共享的响应。注意该模块在 Apache 中标记为 Experimental。
- 文件句柄/内存映射缓存(mod_file_cache):在服务器启动时打开文件或映射文件到内存,适合极少变更的静态文件;对运行时变更不敏感,变更需重启。
- 键值共享对象缓存(mod_socache_*):用于 SSL 会话、认证结果 等,不直接缓存页面内容,常与 SSL/TLS 优化配合使用。
二 启用模块与基础检查
- 在 CentOS 7/8 上,安装 httpd 后通常已包含相关模块,建议通过 /etc/httpd/conf.modules.d/*.conf 显式加载所需模块,便于管理:
# 示例:/etc/httpd/conf.modules.d/00-cache.conf
LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
# LoadModule mem_cache_module modules/mod_mem_cache.so # 可选:内存缓存
LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
# LoadModule file_cache_module modules/mod_file_cache.so # 可选:文件句柄/内存映射
- 语法检查与生效:
sudo apachectl configtest
sudo systemctl restart httpd
三 配置方案示例
- 方案A 反向代理/本地内容缓存(磁盘后端,生产常用)
<
IfModule mod_cache.c>
<
IfModule mod_disk_cache.c>
CacheRoot /var/cache/httpd/proxy
CacheEnable disk /
CacheDirLevels 2
CacheDirLength 1
CacheSize 256000 # 单位 KB,示例约 250 MB
CacheMaxFileSize 1048576 # 1 MB
CacheMinFileSize 10
# 过期策略:无显式过期时使用的默认与上限
CacheDefaultExpire 3600
CacheMaxExpire 86400
# 计算过期:基于 Last-Modified 的启发式因子
CacheLastModifiedFactor 0.5
# 容错与覆盖:忽略客户端 no-cache/no-store;允许无 Last-Modified 的响应进入候选
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
# 可选:即使客户端中断,也尽量完成缓存写入(提升命中)
CacheForceCompletion 80
<
/IfModule>
<
/IfModule>
- 方案B 浏览器端强缓存(静态资源,提升首屏与带宽利用率)
<
IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 1 hour"
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/javascript "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
<
/IfModule>
<
IfModule mod_headers.c>
# 对匹配的资源补充 Cache-Control(可与 Expires 叠加)
<
FilesMatch "\.(css|js|jpe?g|png|gif|svg|woff2)$">
Header set Cache-Control "public, max-age=31536000, immutable"
<
/FilesMatch>
<
/IfModule>
- 方案C 启动期文件句柄/内存映射缓存(仅对极稳定静态文件)
# 注意:变更文件后需重启 httpd 才会生效
LoadModule file_cache_module modules/mod_file_cache.so
CacheFile /var/www/html/index.html
CacheFile /var/www/html/static/logo.png
# 或使用内存映射(谨慎:不跟踪内存占用,子进程复制可能导致内存放大)
# MMapFile /var/www/html/index.html
- 生效与验证:
sudo apachectl configtest
sudo systemctl restart httpd
curl -I https://your-domain/static/app.js
# 期望看到:Cache-Control: public, max-age=31536000 或 Expires: <
未来时间>
四 关键指令与行为要点
- CacheEnable/Disable:按 URI 前缀启用/禁用缓存;可同时配置多种存储后端(如 mem/fd/disk),按顺序尝试直到命中。
- 过期计算顺序:若响应含 Expires 则以其为准;否则若含 Last-Modified 则按 CacheLastModifiedFactor 启发式计算;若均无则使用 CacheDefaultExpire;但任何情况下不超过 CacheMaxExpire。
- 可缓存性限制:带 Authorization 或显式 no-cache/no-store 的响应默认不缓存;使用 CacheIgnoreCacheControl On 可强制入库(仍受授权限制)。
- 不缓存的状态码:通常仅缓存 200、203、300、301、410 等;对 206 分块传输与 流式内容需结合 CacheForceCompletion 提升命中。
- 磁盘后端参数:CacheDirLevels/CacheDirLength 控制目录层级与长度;CacheSize 限制总缓存体积;CacheMaxFileSize/CacheMinFileSize 过滤过大/过小对象。
五 验证与运维建议
- 验证要点:
- 使用 curl -I 检查响应头是否包含期望的 Cache-Control/Expires。
- 观察命中情况与目录增长(磁盘后端),必要时调整 CacheSize 与清理策略。
- 运维与安全:
- 为缓存目录设置专用 SELinux 上下文与最小权限(如 httpd_sys_rw_content_t),避免泄露敏感内容。
- 对含有用户身份信息的动态内容避免入库,或通过 Vary 与 Cache-Control: private 精细控制。
- 变更静态资源时采用 文件名哈希或版本号,避免强缓存导致更新不可达。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Apache缓存策略
本文地址: https://pptw.com/jishu/774483.html
