用户在配置华为云 CDN 的 HTTPS 回源时,如果遇到“回源不匹配”导致的 504 超时或资源加载失败,通常是因为回源协议、回源 SNI 和回源 HOST 这三项配置没有对齐。用户可以先通过下面这个表格快速理解核心配置,再按场景进行排查:
配置项 作用 如何匹配源站
回源协议 决定 CDN 节点用 HTTP 还是 HTTPS 访问源站 必须与源站支持的协议一致。若源站强制 HTTPS,回源协议必须选 HTTPS
回源 SNI 当源站 IP 绑定多个域名时,CDN 通过 SNI 告诉源站要访问的是哪个域名 必须设置为源站上实际对应的站点域名(通常是证书绑定的域名)
回源 HOST CDN 回源时,在 HTTP 请求头中携带的域名,告诉源站要访问哪个站点 应设置为源站上实际对应的站点域名,而非加速域名(除非二者相同)
一、分场景排查与配置建议
理解了上面的关系后,你可以根据源站的实际情况,对照以下场景进行操作:
场景一:源站是 IP 地址,且该 IP 上托管了多个 HTTPS 站点
这是最容易出错的情况。如果你的源站填写的是 IP,但该服务器上绑定了多个 HTTPS 域名(例如 `a.com` 和 `b.com`),此时必须配置回源 SNI。
操作建议:在 CDN 控制台的“回源配置”中,找到“回源 SNI”设置项 。将其值设置为你的源站能正确识别并返回对应 SSL 证书的域名(例如你要加速的域名 `www.example.com`)。如果不配置,CDN 回源时不会携带 SNI 信息,源站服务器无法确定返回哪个证书,可能导致握手失败或返回错误内容。
场景二:源站是 OBS 桶或其他云存储
如果你的源站是对象存储(如华为云 OBS),请注意 OBS 桶通常只支持 HTTP 协议回源。
操作建议:虽然客户端可以通过 HTTPS 访问 CDN,但如果 CDN 用 HTTPS 协议回源到 OBS 桶,可能会因为 OBS 桶的 HTTPS 配置问题导致回源失败 。通常建议将**回源协议设置为 HTTP,由 CDN 节点负责 HTTPS 加密,而 CDN 与 OBS 之间走内网 HTTP,这样既能保证安全,也更稳定高效。
场景三:源站是自建 Nginx / Apache 服务器
这类源站配置灵活,可以根据业务需求调整。
操作建议:
1. 确认协议:检查源站 Web 服务器是否开启了 HTTPS 监听。如果只开启了 80 端口,回源协议必须选 HTTP;如果开启了 443 端口,建议将回源协议设置为 HTTPS,实现全链路加密。
2. 确认回源 HOST:如果源站上配置了多个虚拟主机(ServerName),请将 回源 HOST 设置为对应站点的域名,确保 CDN 能请求到正确的站点目录 。
二、配置完成后的验证
修改配置后,可以通过以下方法验证是否生效:
1. 清除缓存:在 CDN 控制台执行“刷新”操作,强制 CDN 节点回源以获取最新内容 。
2. 直接测试:使用 `curl` 命令绕过本地缓存,模拟 CDN 回源行为。例如,你可以绑定本地 `hosts` 文件,将加速域名指向一个 CDN 节点 IP,然后执行 `curl -v https://你的加速域名/资源路径`,重点查看返回的响应头信息,确认是否返回了预期内容。
如果按照上述步骤操作后问题仍然存在,可能需要检查源站服务器的 SSL证书链是否完整,不完整的证书链也可能导致 CDN 回源握手失败 。