Apache为字体和图标配置高效缓存需启用mod_expires与mod_headers模块,按MIME类型设1年过期(如font/woff2、image/x-icon),并用Header set Cache-Control"public, max-age=31536000, immutable"强化语义,确保MIME正确识别且验证响应头生效。
apache 为字体(.woff、.woff2、.ttf、.eot、.svg)和图标(.ico、.png)等静态资源配置高效缓存,核心是通过 mod_expires 和 mod_headers 模块设置强缓存策略,减少重复请求,提升加载速度与 cdn 回源效率。
启用必要模块并确认支持
确保 Apache 已加载以下模块(Linux 下常用 a2enmod,Windows 下检查 httpd.conf 中的 LoadModule 行):
-
mod_expires:用于按 MIME 类型设置过期时间(ExpiresByType) -
mod_headers:补充设置Cache-Control等现代缓存头(更优先于 Expires) -
mod_mime(通常默认启用):确保字体/图标文件类型被正确识别
若使用 CentOS 7,还需确认 SELinux 允许 Apache 读取字体目录(如 /var/www/fonts),必要时运行:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/fonts(/.*)?"sudo restorecon -Rv /var/www/fonts
在站点配置或 .htaccess 中添加缓存规则
推荐写入虚拟主机配置(<Directory> 或 <Location> 块),比 .htaccess 更高效。若必须用 .htaccess,请确保 AllowOverride All 已启用。
示例配置(兼容 Apache 2.4+):
<IfModule mod_expires.c> ExpiresActive On # 字体文件:缓存 1 年(建议 max-age=31536000) ExpiresByType font/woff2 "access plus 1 year" ExpiresByType font/woff "access plus 1 year" ExpiresByType font/ttf "access plus 1 year" ExpiresByType font/eot "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" # 图标文件 ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/gif "access plus 1 year" </IfModule> <p><IfModule mod_headers.c> <FilesMatch ".(woff2|woff|ttf|eot|svg|ico|png|gif)$"> Header set Cache-Control "public, max-age=31536000, immutable" </FilesMatch> </IfModule>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
immutable是关键:告诉浏览器该资源不会变更,无需在后续请求中发送If-None-Match或If-Modified-Since验证,彻底跳过条件请求 -
public允许 CDN 和中间代理缓存;生产环境避免用private - 不要对字体设
no-cache或短时间缓存——它们极少更新,且体积大,重复下载代价高
验证与常见避坑点
部署后,用浏览器开发者工具(Network 标签页)检查响应头:
- 确认返回了
Cache-Control: public, max-age=31536000, immutable - 确认没有冲突的
Cache-Control: no-store或Vary: *覆盖缓存行为 - 字体文件需有正确 MIME 类型:例如
.woff2应为font/woff2(非application/octet-stream),否则ExpiresByType不生效;可在httpd.conf或.htaccess中显式添加:AddType font/woff2 .woff2AddType font/woff .woffAddType image/x-icon .ico
若使用 CDN(如 Cloudflare),确保其未覆盖源站缓存头;可将 CDN 缓存规则设为“尊重源站头”或手动设置相同 Cache-Control。
进阶:配合版本化路径实现真正长期缓存
仅靠长缓存不够——用户更新字体后,旧缓存仍生效。最佳实践是“内容哈希 + 版本路径”:
- 构建时生成带哈希的文件名,如
icon-abc123.svg、font-main-d4e567.woff2 - HTML/CSS 中引用新文件名,旧文件可直接下线
- 此时可放心设
max-age=31536000甚至永久缓存(max-age=315360000) - 无需清理用户本地缓存,升级自然生效
不依赖文件名哈希时,也可用查询参数(如 icon.png?v=2.1),但注意部分 CDN 和代理可能忽略参数做缓存,稳定性不如路径哈希。

















