apache静态网站缓存策略核心是按资源类型分层控制:图片/字体等长效资源设1年缓存,css/js依哈希设1月或1年,html等动态文件禁用缓存并强制校验,需启用mod_expires和mod_headers模块并配置expiresbytype与cache-control头。

静态网站部署在 Apache 上时,缓存控制策略的核心目标是:让浏览器对不变的资源(如图片、CSS、JS、字体)长期缓存,同时确保 HTML 等动态入口文件每次请求都校验更新。这不是“全开缓存”或“全关缓存”,而是按资源类型分层控制。
启用必要模块并确认加载
缓存功能依赖两个基础模块:mod_expires(设 Expires 头)和 mod_headers(设 Cache-Control 等现代头)。需先确认它们已启用:
- 运行
apachectl -M | grep -E "(expires|headers)",看到expires_module和headers_module表示就绪 - 若未启用,在主配置(如
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf)中取消以下两行注释:LoadModule expires_module modules/mod_expires.soLoadModule headers_module modules/mod_headers.so - 修改后执行
apachectl configtest && systemctl reload apache2(或httpd)生效
按 MIME 类型精准设置过期时间
比按文件后缀更可靠的是依据响应头中的 Content-Type 设置缓存。在虚拟主机或目录配置块中加入:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 长效静态资源(建议 1 年):
ExpiresByType image/jpeg "access plus 1 year"ExpiresByType image/png "access plus 1 year"ExpiresByType image/webp "access plus 1 year"ExpiresByType font/woff2 "access plus 1 year" - CSS 与 JS(若文件名含哈希如
app.8f3e.js,也可设为 1 年;否则建议 1 个月):ExpiresByType text/css "access plus 1 month"ExpiresByType application/javascript "access plus 1 month" - 强制禁用 HTML、JSON 等动态内容缓存:
ExpiresByType text/html "access plus 0 seconds"ExpiresByType application/json "access plus 0 seconds" - 兜底规则,防漏配:
ExpiresDefault "access plus 0 seconds"
补充 Cache-Control 提升兼容性与语义精度
仅靠 Expires 已不够。现代浏览器优先信任 Cache-Control,尤其需要明确声明 public、immutable 或 no-cache:
- 对带哈希的 CSS/JS 添加 immutable(避免验证请求):
<ifmodule mod_headers.c></ifmodule><filesmatch></filesmatch>Header set Cache-Control "public, max-age=2592000, immutable" - 对图片、字体等长效资源统一加:
Header set Cache-Control "public, max-age=31536000" - 对 HTML 文件,明确禁止代理缓存并强制校验:
<files></files>Header set Cache-Control "no-cache, must-revalidate, private"Header set Pragma "no-cache"Header set Expires "0"
验证是否生效
重启 Apache 后,打开浏览器开发者工具(F12 → Network),刷新页面,点击任意静态资源(如 logo.png 或 main.css),检查响应头是否包含:
Cache-Control: public, max-age=31536000Expires: [未来某日 GMT 时间]- 且没有
no-cache、private或must-revalidate出现在图片/CSS/JS 响应中
HTML 文件则应看到 Cache-Control: no-cache, must-revalidate, private,且无 max-age 值。










