启用mod_expires模块是Apache实现客户端长效缓存的基础,需同时启用mod_headers模块,配置ExpiresActive On及按MIME类型用ExpiresByType设置过期时间(如图片1年、CSS/JS1个月),禁用HTML等动态内容缓存,并补充Cache-Control与immutable头,最后通过curl或DevTools验证响应头。
启用 mod_expires 模块是 apache 实现客户端缓存控制的基础,但光加载模块还不够——必须配合正确的配置位置、按 mime 类型设置规则,并补充现代缓存头,浏览器才会真正按预期缓存资源。
确认并启用 mod_expires(及 mod_headers)
这两个模块需同时启用:
- 运行 apachectl -M | grep expires,看到
expires_module (shared)表示已加载;同理检查headers_module - 若未启用,Debian/Ubuntu 系统直接执行:
a2enmod expires headers - RHEL/CentOS 或源码安装环境,编辑主配置文件(如
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf),取消以下两行注释:LoadModule expires_module modules/mod_expires.soLoadModule headers_module modules/mod_headers.so - 保存后重启服务:systemctl restart apache2(或 httpd)
在正确位置写入缓存规则
规则必须放在生效范围内,且 ExpiresActive On 是前提:
- 推荐写在
<VirtualHost>块内(比 .htaccess 更稳定、更高效) - 务必用
<IfModule mod_expires.c>包裹,避免模块未启用时配置报错 - 第一行必须是 ExpiresActive On,否则所有 ExpiresByType 或 ExpiresDefault 都不生效
- 不要用
now plus X—— 它每次请求都取服务器当前时间,导致缓存时间不稳定
按 MIME 类型精准设置过期策略
用 ExpiresByType 比按文件后缀(如 FilesMatch)更可靠,它依据响应头中的 Content-Type 判断:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 图片类:
ExpiresByType image/jpeg "access plus 1 year"(同理覆盖 png/webp/ico) - CSS / JS:
ExpiresByType text/css "access plus 1 month",若文件名含哈希(如 app.abc123.js),可升为 1 年 - 字体与 WASM:
ExpiresByType font/woff2 "access plus 1 year",application/wasm "access plus 1 week" - 显式禁用动态内容:
ExpiresByType text/html "access plus 0 seconds",同样适用于 json、xml、php 输出等 - 避免使用
ExpiresDefault作兜底,容易误缓存 HTML 或 API 响应
补充 Cache-Control 头提升兼容性
仅靠 Expires 不足以满足现代浏览器要求,Cache-Control 才是 HTTP/1.1 标准的权威指令:
- 在同一个
<VirtualHost>中添加:<IfModule mod_headers.c><br> Header set Cache-Control "public, max-age=31536000"<br></IfModule>
- 对带哈希的静态资源,加
immutable可跳过条件请求:Header set Cache-Control "public, immutable, max-age=31536000" - 动态页面建议单独控制:
<FilesMatch "\.(html|php)$"><br> Header set Cache-Control "no-cache, no-store, must-revalidate"<br></FilesMatch>
配置完成后,用 curl -I https://yoursite.com/style.css 或浏览器 DevTools → Network → 查看响应头,确认同时存在 Expires 和 Cache-Control 字段,且状态码出现 200 (from disk cache) 或 304,即表示生效。

















