apache 本身不参与 cdn 回源,仅作为支持 sni 的 https 源站;需为多域名配置独立 virtualhost 并指定证书,cdn 侧也须开启并正确设置回源 sni,否则导致握手失败或 502/504 错误。
apache 本身不直接参与 cdn 回源过程,它作为源站服务器,只需正确响应来自 cdn 节点的 https 回源请求。所谓“在 apache 中配置 sni”其实是让 apache 支持基于 sni 的多域名 https 服务,从而确保 cdn 节点用 https 回源时能正确匹配证书、访问到对应站点。
为什么源站需要支持 SNI
当 CDN 节点回源使用 HTTPS 协议,且你的源站 IP 绑定了多个域名(比如 www.a.com 和 api.b.com)时,CDN 在 TLS 握手初期必须告知服务器要访问哪个域名——否则服务器无法选择正确的证书,握手会失败或返回默认/错误证书。SNI 就是这个“打招呼”的机制。
Apache 2.2.12+ 默认支持 SNI,但需满足两个前提:启用 OpenSSL 且编译时启用了 TLS 扩展支持(主流发行版默认满足)。
Apache 启用多域名 SNI 的关键配置
核心是为每个域名配置独立的
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保启用 mod_ssl:
a2enmod ssl(Debian/Ubuntu)或确认LoadModule ssl_module modules/mod_ssl.so已加载 - 每个域名使用独立的
<virtualhost></virtualhost>,并设置ServerName和对应证书路径 - 必须为每个虚拟主机明确指定
SSLCertificateFile和SSLCertificateKeyFile - 推荐启用
SSLStrictSNIVHostCheck off(可选),避免旧客户端无 SNI 扩展时被拒
CDN 侧必须同步配置回源 SNI
仅 Apache 支持 SNI 不够,CDN 节点回源时也得主动发送 SNI 扩展,才能触发 Apache 的域名匹配逻辑。这一步由 CDN 控制台或 API 完成,和 Apache 无关:
- 在 CDN 管理后台找到目标加速域名的「回源配置」→「回源 SNI」
- 开启开关,并填写你希望 CDN 回源时声明的域名(例如 www.a.com)
- 该域名必须与 Apache 中对应
<virtualhost></virtualhost>的ServerName完全一致 - 若未配置或填错,CDN 可能拿到默认证书或握手失败,导致 502/504 错误
验证是否生效
最直接的方式是用 OpenSSL 模拟 CDN 回源行为:
openssl s_client -connect your-origin-ip:443 -servername www.a.com -showcerts观察输出中的证书主题(subject)是否为你为 www.a.com 配置的证书;换 api.b.com 再试一次,应返回另一张证书。成功即说明 Apache + CDN 回源 SNI 全链路就绪。










