Apache与CDN集成核心是三协同:一、前端资源路径重写为CDN域名;二、Apache配置Expires和Cache-Control头以对齐CDN缓存策略;三、分离静态资源处理逻辑,如直连对象存储或反向代理至专用静态节点。

Apache 静态资源与 CDN 的集成,核心是让浏览器请求的 CSS、JS、图片等文件,实际从 CDN 节点加载,而非源站 Apache 服务器。这需要三方面协同:资源路径重写(让前端链接指向 CDN)、源站缓存策略优化(配合 CDN 缓存行为)、以及静态资源托管方式调整(避免 Apache 不必要地处理这些请求)。
修改资源引用路径,指向 CDN 域名
前端 HTML 或模板中所有静态资源 URL 必须替换为 CDN 域名前缀,否则用户仍会回源请求。
- Webpack/Vue/React 项目:在
vue.config.js或webpack.config.js中设置publicPath为 CDN 地址,例如https://static.example.com/ - PHP 项目(如 PhalApi):通过配置项(如
cdn_domain)统一管理,并在模板中动态拼接,避免硬编码 - 纯静态网站:批量替换
href="/css/app.css"为href="https://static.example.com/css/app.css",注意路径开头不带斜杠时需手动补全
配置 Apache 缓存头,与 CDN 缓存策略对齐
CDN 是否缓存、缓存多久,不仅取决于 CDN 后台设置,更依赖源站返回的 HTTP 头(如 Cache-Control 和 Expires)。Apache 必须正确输出这些头。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 启用
mod_expires模块,在.htaccess或虚拟主机配置中设置不同资源类型过期时间,例如:ExpiresByType text/css "access plus 1 year"ExpiresByType image/png "access plus 1 month" - 补充
Cache-Control头,增强兼容性:Header set Cache-Control "public, max-age=31536000"(CSS/JS)Header set Cache-Control "public, max-age=2592000"(图片) - 确保响应头不含
no-cache或no-store,否则 CDN 可能拒绝缓存
分离静态资源处理逻辑,减轻 Apache 负担
即使启用了 CDN,若所有请求仍先经过 Apache,它就仍是单点瓶颈。理想做法是让静态资源请求绕过 Apache 应用层。
- 使用对象存储(如阿里云 OSS、腾讯云 COS)托管全部静态资源,前端直连 CDN 域名,Apache 完全不参与响应
- 在负载均衡架构中,用
ProxyPassMatch将/static/.*或\.(js|css|png|woff2)$类请求直接转发到专用静态服务器或 Nginx 缓存节点 - 禁用 Apache 上不必要的模块(如
mod_php)用于静态资源目录,仅保留mod_headers、mod_expires等必需模块
验证与调试关键点
上线后必须逐项验证,避免“看似集成实则无效”:
- 打开浏览器开发者工具 → Network 标签页,检查一个 JS 文件的
Response Headers,确认via字段含 CDN 提供商标识(如via: cache23.lga1[2345]),且x-cache显示HIT - 对比资源 URL 的域名:应为
static.example.com,而非www.example.com - 用
curl -I https://static.example.com/logo.png查看返回头,确认含有效Cache-Control和Expires

















