apache 与 cdn 安全对接的核心是确保 https 回源链路稳定可信:启用并正确配置 ssl(含完整证书链)、匹配 cdn 回源协议(如 http/2 或 http/1.1)、禁用源站 http 跳转防重定向循环、限制仅 cdn ip 可访问源站 443 端口。

Apache 作为源站,要和 CDN 安全对接,核心不是“把证书装在 Apache 上就完事”,而是让 CDN 回源时能稳定、可信地连接到 Apache 的 HTTPS 接口,同时避免协议冲突、证书错误或重定向循环。重点在于回源链路的完整性与一致性。
确保 Apache 启用并正确配置 HTTPS
CDN 回源必须能访问到一个可用的 HTTPS 端点,Apache 必须监听 443 端口并启用 SSL 模块:
- 确认已加载 mod_ssl 和 mod_http2(如需 HTTP/2 回源)
- SSL 配置中必须包含完整证书链:服务器证书 + 中间证书(不能只传 .crt 文件而漏掉中间 CA)
- 推荐使用 SSLCertificateFile 和 SSLCertificateChainFile 分开指定,或合并为单个 PEM 文件后用 SSLCertificateFile 加载
- 禁用不安全协议和弱密码套件,例如在 VirtualHost 中添加:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
CDN 回源协议与 Apache 的匹配要点
不同 CDN 对回源协议支持差异大,Apache 需按实际回源方式做适配:
-
阿里云 DCDN / 腾讯云 EdgeOne:支持开启“HTTP/2 回源”,但 Apache 必须在 443 端口 listen 指令中显式加上 http2,例如:
Listen 443 https
Protocols h2 http/1.1
... - Cloudflare:目前不支持客户自定义回源协议,始终使用 HTTP/1.1 回源,Apache 只需确保 HTTPS 正常即可,无需启用 HTTP/2 回源相关配置
- 所有 CDN:若回源走 HTTPS,Apache 的 ServerName 必须与 CDN 配置的回源域名或证书绑定域名一致,否则 TLS 握手可能失败(尤其启用了 SNI 时)
关闭源站 HTTP 跳转,防止重定向循环
这是最易被忽略却高频出问题的一环。CDN 已强制 HTTPS 访问用户,源站再做 HTTP→HTTPS 301 跳转会引发 ERR_TOO_MANY_REDIRECTS:
- Apache 的 .htaccess 或 VirtualHost 中,删除所有类似 RewriteCond %{HTTPS} off 的跳转规则
- 确保 DocumentRoot 下的服务直接响应 HTTPS 请求,不依赖重定向来“补救”协议
- 验证方式:用 curl 模拟 CDN 回源请求:
curl -I -k --resolve example.com:443:YOUR_SERVER_IP https://example.com,响应应为 200,而非 301/302
限制仅允许 CDN IP 访问源站端口
配合 HTTPS 回源,还需从网络层加固,防止源站 IP 被直接探测或绕过 CDN:
- 在 Apache 配置中,用 Require ip 限定来源(适用于已知 CDN IP 段的场景):
Require ip 173.245.48.0/20 103.21.244.0/22 ... - 更稳妥的做法是在云服务器安全组层面封禁 80/443 端口对全网开放,只放行 CDN 官方公布的回源 IP 段(如 Cloudflare、阿里云、腾讯云均公开维护最新列表)
- 配合日志检查,确认所有 443 请求都带有 CDN 特征头(如 Cf-Connecting-IP、X-Forwarded-For),无裸 IP 直连记录










