Apache优化Cache-Control的核心是按资源类型差异化配置并结合immutable等语义,需启用mod_headers和mod_expires模块,设置合理max-age与Expires双重头,并验证无覆盖。
apache 优化 cache-control 的核心,是让浏览器知道哪些资源能缓存、缓存多久、是否可共享,从而减少重复请求。光设一个 max-age 不够——必须结合资源类型、更新机制和现代语义(比如 immutable)来配置,才能真正提升加载速度。
启用并确认 mod_headers 和 mod_expires 模块
Cache-Control 头由 mod_headers 设置,而 mod_expires 可辅助生成兼容的 Expires 头(尤其对老客户端)。两者建议同时启用:
- 运行
apachectl -M | grep -E 'headers|expires',检查是否已加载; - 若未启用,在
httpd.conf或apache2.conf中取消注释:LoadModule headers_module modules/mod_headers.soLoadModule expires_module modules/mod_expires.so; - 重启 Apache:
sudo systemctl restart apache2(Debian/Ubuntu)或sudo systemctl restart httpd(RHEL/CentOS)。
按 MIME 类型设置差异化 Cache-Control 策略
静态资源生命周期不同,不能一刀切。推荐在虚拟主机或目录配置中使用 <IfModule mod_headers.c> 块精准控制:
- CSS / JS(带哈希版本号):
Header set Cache-Control "public, max-age=2592000, immutable"(30天,不可变); - 图片(PNG/JPEG/GIF):
Header set Cache-Control "public, max-age=31536000"(1年); - 字体文件(woff2/woff):
Header set Cache-Control "public, max-age=31536000, immutable"; - HTML / PHP 页面(动态内容):
Header set Cache-Control "no-cache, must-revalidate"或直接禁用缓存。
配合 ExpiresByType 实现双重保障
虽然 Cache-Control 是现代标准,但部分代理或老旧环境仍依赖 Expires。用 mod_expires 补充可增强兼容性:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用:
ExpiresActive On; - 设置示例:
ExpiresByType text/css "access plus 1 month"ExpiresByType image/webp "access plus 1 year"ExpiresByType application/font-woff2 "access plus 1 year"; - 注意:若同时设了
Cache-Control: max-age和Expires,浏览器以max-age为准,Expires主要服务中间代理。
验证与调试响应头是否生效
配置完成后务必验证,避免白配:
- 命令行检查:
curl -I https://yoursite.com/style.css,确认返回头含Cache-Control和Expires; - 浏览器开发者工具(Network → Headers)查看具体资源响应头;
- 特别注意:确保没有其他配置(如 .htaccess、PHP header()、CDN 设置)覆盖了你的 Apache 头;
- 如果用了 CDN(如 Cloudflare),需确认其缓存规则未强制改写或忽略源站头。
不复杂但容易忽略:Cache-Control 的价值不在“设了”,而在“设对”——区分动静态、匹配发布机制(如文件名哈希)、加上 immutable 避免重验证,才是提速的关键。

















