升级 HTTPS 不仅是 CDN 上挂证书,核心在于回源协议匹配和全站资源加密,否则容易出现 502 错误或混合内容警告。
先说结论:CDN 侧必须配置有效证书,回源协议需根据源站能力选择 HTTP 或 HTTPS,同时需解决前端混合内容问题。
- 适合:全站启用 HTTPS 加密传输,且源站支持或可配置相应协议的场景。
- 先准备:确认源站端口(80 或 443)、证书格式(PEM)及域名匹配情况,私钥支持 RSA 或 ECC。
- 验收:检查浏览器安全面板无混合内容警告,且回源链路无 301 循环或 502 错误。
证书与 CDN 基础配置
在 CDN 控制台上传证书,确保证书域名与加速域名匹配。若使用通配符证书,需确认覆盖所有二级域名。
- 证书格式:通常要求为 PEM 格式,私钥支持 RSA 或 ECC 格式,根据安全需求选择,若为其他格式需先转换。
- HTTPS 开关:在 CDN 域名管理中找到 HTTPS 配置,开启强制 HTTPS 跳转。
- HTTP/2 支持:建议同时开启 HTTP/2 以提升加载性能,兼容主流浏览器。
回源协议与源站适配
登录 CDN 控制台检查回源配置,避免协议不匹配导致连接失败:
- 源站支持 HTTPS:回源端口设为 443,协议选 HTTPS,并确保源站开放 443 端口且证书有效。
- 源站仅支持 HTTP:回源端口设为 80,协议选 HTTP,避免 CDN 以 HTTPS 请求源站导致连接失败。
- SNI 配置:当源站 IP 绑定多个域名时,需在 CDN 开启回源 SNI 并指明具体域名,否则可能返回 503 错误。
前端混合内容处理
检查页面内的脚本、样式、图片及 Ajax 请求。浏览器安全策略会阻止 HTTPS 页面加载 HTTP 资源。
错误示例:
<script src="http://example.com/lib.js"></script>修正方案:改为 https:// 或协议相对路径 //。
<script src="//example.com/lib.js"></script>对于动态构建的资源路径,建议通过环境变量管理 API 基础 URL,避免硬编码协议。
源站 Nginx 例外配置
部分老旧第三方服务可能仅支持 HTTP,但主流平台如微信已强制要求 HTTPS 回调。若源站需保留特定 HTTP 接口,可在 Nginx 中配置例外,避免全站 301 跳转导致回调失败。
server {
listen 80;
server_name example.com;
# 特定路径保留 HTTP,其他强制跳转 HTTPS
location /api/legacy_http {
# 不执行 return 301
proxy_pass http://backend;
}
location / {
return 301 https://$host$request_uri;
}
}验证与排查
1. 浏览器安全面板
打开 Chrome 开发者工具的 Security 面板,查看是否存在 Mixed Content 警告。若显示“连接是安全的”,则前端资源加载正常。
2. 命令行测试
使用 curl 命令测试回源链路是否正常,观察状态码:
curl -I https://你的域名若返回 200 OK 且无多次 301 跳转,说明链路通畅。若出现 502 或 503,需检查源站端口及 SNI 配置。
3. 常见错误排查
- 301 重定向循环:CDN 强制 HTTPS 跳转,但源站 HTTP 请求也返回 301 到 HTTPS,导致请求在两者间无限循环,最终报 502 错误。
- 证书域名不匹配:购买的证书仅适用于主域名,但加速域名为二级域名,导致浏览器报证书无效错误。
- SSL 版本不匹配:源站或 CDN 配置的 SSL 版本过低或加密套件不受支持,导致 ERR_SSL_VERSION_OR_CIPHER_MISMATCH 错误。