跳到主要内容

阿里云 CDN 加速 GitHub Pages 完整指南

GitHub Pages 的服务器在境外,国内用户直接访问 xxx.github.io 速度不稳、延迟高。通过阿里云 CDN 接入国内节点,可以在不改动源站的前提下大幅提升国内访问体验。

前提条件

  • 一个你自己的域名(必须——你不能把 github.io 直接接入阿里云 CDN)
  • 一个 GitHub Pages 仓库
  • 阿里云账号(完成实名认证)
  • 如果加速区域选中国大陆:域名必须完成 ICP 备案

备案不是 GitHub Pages 备案(它也备不了),而是给你的域名备案。未备案的域名只能选"全球(不含中国大陆)",国内访问改善有限。

域名方案:两种路径怎么选

方案 A:GitHub Pages 绑定自定义域名(官方推荐)

在仓库 Settings → Pages → Custom domain 填写你的域名,勾选 Enforce HTTPS

效果

  • 你的域名 正常访问,GitHub 自动签发 HTTPS 证书
  • xxx.github.io 会被强制重定向到你的域名,无法独立访问

适合:只需要一个访问入口,不 care github.io 是否存活。

方案 B:DNS CNAME 到 github.io,不在 GitHub 侧绑定

仓库 Pages 设置保持空白,不填自定义域名,不创建 CNAME 文件。只在 DNS 侧把域名 CNAME 到 xxx.github.io

效果

  • xxx.github.io 原生访问保留,不跳转
  • 你的域名 独立访问同一份内容
  • ❌ GitHub 不会为你的自定义域名签发 HTTPS 证书——需要 CDN 层补齐

适合:想保留两个访问入口,CDN 层统一处理 HTTPS。

对比

维度方案 A(GitHub 绑域名)方案 B(纯 DNS CNAME)
github.io 能否独立访问❌ 强制跳转✅ 独立共存
HTTPSGitHub 免费证书需 CDN 层补齐
CDN 兼容性无影响无影响
配置复杂度

二者都可以对接阿里云 CDN,差异只在 DNS 最后指向的是 GitHub 还是 CDN CNAME。

CDN 配置步骤

1. 开通 CDN 服务

阿里云控制台搜索"CDN" → 开通服务。新用户通常有 50GB/年免费流量,个人博客绰绰有余。

2. 添加加速域名

  • 加速域名:填你的自定义域名(如 blog.nevergpdzy.cn
  • 源站信息
    • 源站类型:源站域名
    • 源站地址:nevergpdzy.github.io
    • 端口:443(GitHub Pages 强制 HTTPS)
  • 加速区域
    • 已备案:中国大陆
    • 未备案:全球(不含中国大陆)

3. 配置回源 Host(关键)

进入 CDN 域名管理 → 回源配置 → 回源 Host:选择 源站域名

这一步的作用:CDN 回源到 github.io 时,携带的 Host 请求头保持为 nevergpdzy.github.io 而非你的自定义域名。

GitHub Pages 需要用 Host 头来定位到具体是哪个用户的站点(同一组服务器托管了无数 xxx.github.io),所以回源 Host 必须正确指向你的 GitHub Pages 地址。但除此之外,GitHub 没有额外的 Host 黑名单或阻断逻辑——只要 Host 指向了一个真实存在的 Pages 站点,就能正常回源。这与百度等商业大站的多层 Host 封禁有本质区别。

4. 配置 HTTPS

在 CDN 控制台为你的域名配置 SSL 证书:

  • 阿里云免费 DV 证书(在 SSL 证书控制台申请)
  • 或 Let's Encrypt / 其他来源证书

开启强制 HTTPS(HTTP → HTTPS 自动跳转)。

5. DNS 解析(最后一步)

CDN 添加域名成功后会生成一个 CNAME 地址(类似 xxx.aliyuncdn.com)。

去你的域名 DNS 管理面板,添加记录:

  • 主机记录blog(或你使用的子域名前缀)
  • 记录类型:CNAME
  • 记录值:粘贴 CDN 提供的 CNAME 地址

等待解析生效(通常几分钟到几十分钟)。

6. 验证

  • 用浏览器访问你的自定义域名,确认 HTTPS 正常、页面正常加载
  • 检查响应头中是否有 CDN 相关标识
  • 用不同网络环境测试访问速度

最终链路

用户

你的域名(DNS 解析到阿里云 CDN CNAME)

阿里云 CDN 边缘节点(有缓存则直接返回)
↓(缓存未命中,回源)
nevergpdzy.github.io:443(GitHub Pages)

返回内容,CDN 按规则缓存

日常维护

  • 内容更新后,在 CDN 控制台刷新缓存(或设置合理的缓存过期规则)
  • 关注流量用量,超出免费额度后按量计费
  • 如果 GitHub Pages IP 发生变化(罕见),一般不需要做任何操作,因为回源地址是域名而非 IP

常见问题

为什么能套 CDN 加速 GitHub Pages,但不能套百度?

GitHub PagesHost 头仅用于路由到具体用户的站点,没有额外的 Host 黑名单、IP 风控或防盗链拦截,只要回源 Host 指向有效的 Pages 地址即可正常回源。

百度 / B 站 / 淘宝等大厂:多层防护(Host 白名单 + IP 黑名单 + TLS 指纹 + 全局风控),CDN 节点的 IP 池早已被标记为"机房/代理",即使回源 Host 填对了也照样 403。

一句话:回源 Host 填对只解决了第一层路由,商业大站还有几十层防护在等着你。

直接 CNAME 到 github.io 和 CDN 反向代理有什么区别?

  • 纯 DNS CNAME:只改了 DNS 指向的 IP,HTTP 请求中的 Host 头仍然是你的域名。目标服务器看到陌生 Host → 返回错误。
  • CDN 反向代理:CDN 在转发时可以改写 Host 头为目标站域名,绕过 Host 校验。

这也是为什么直接 CNAME 到百度不行,但 CNAME 到 GitHub Pages 就行——百度拦截陌生 Host,GitHub Pages 只做路由不设卡。

备案会不会过期?

ICP 备案号本身没有固定有效期,但需要保持信息真实、联系方式有效、接入关系正常。域名过期、主体信息变更未及时更新、或从一家服务商迁到另一家后长期未完成接入备案,都可能导致备案失效。

适合接着读