使用又拍云加速GitHub Pages简要配置

GitHub Pages为GitHub上的项目提供主页托管功能, 我们可以用它来托管我们的静态网站. 但是由于GitHub Pages服务器在国外, 因此在国内的访问速度可能不太理想.但是我们可以通过CDN来加速它的访问速度. 正巧又拍云推出了开发者计划, 为开发者提供每月10G的云存储和15G的CDN流量, 对于个人网站来说已经足够了. 下面是我为GitHub Pages配置又拍云CDN加速的一些简要配置记录.

必备条件

  1. 已经备案的域名(国内的CDN厂商基本都要求)
  2. 又拍云账号: 点我注册, 注册完毕后可以到 又拍云联盟页面按要求申请开发者每月免费配额, 一般在自己网站挂一个又拍云的logo然后提交申请就可以了.需要注意的是, 当前你的网站是要有一定内容的不然不会通过(实测我的博客就发了三篇文章就申请通过了).

简要配置

GitHub Pages设置

静态网站如何生成不在本文讨论范围, 这里只讨论自定义域名相关话题. 在托管静态网站的GitHub仓库中点击Settings->Pages->Custom domain 中配置你已经备案的域名, 比如我这里是blog.merack.top. 需要注意的是如果你的page不是由GitHub Actions workflow生成的, 那么需要确认仓库根目录中有一个CNAME文件, 里面存储的是你自定义域名, 具体请看GitHub Pages的文档: https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/troubleshooting-custom-domains-and-github-pages#cname-errors

又拍云设置

创建服务

在又拍云创建CDN服务, 加速域名填你已备案的自定义域名, 应用场景选网页图片, 实际上根据又拍云的文档目前应用场景只是一个标示, 功能是一样的, 随便选也行. 创建完成后又拍云会给出一个CNAME域名, 在域名域名解析中为域名创建一个CNAME记录, 记录值是又拍云会给出的这个CNAME域名.

回源协议选协议跟随,源站证书校验我这里没开, 源站地址根据GitHub Pages的文档填以下IP(建议配置的时候去文档里找, 防止GitHub那边更新IP), 然后点击确定创建服务.

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153


CDN功能设置

接着进入到CDN功能配置.

回源管理

在回源管理中回源Host中填入你自己的自定义域名,  比如我这里是blog.merack.top, 因为源站设置中的IP托管了成千上万个GitHub Pages, 需要回源Host中的域名才能找到你的.

注意!!!: 如果你在上面的步骤中已经为GitHub仓库配置了自定义域名, 这里的回源Host填上的就是该域名, 而不是xxx.github.io, 否则会造成too many redirects 的错误.

验证

到这里就可以就可以验证是否配置成功了, 直接ping 或者dig我们的域名, 如果返回的是nm.aicdn.com, 那么就表示我们成功解析到了CDN,访问网站检查是否有其他问题

更进一步, 可以使用一些在线ping网站来检测CDN是否根据不同地区就近返回: https://www.itdog.cn/ping

HTTPS

此外强烈建议配置下https, 又拍云申购SSL证书中选择Let's Encrypt是免费的, 又拍云会自动帮你续期.

其他配置与注意事项
  1. 其他的配置按需求点点就行, 需要注意的是我看到一些资料说HTTP 302 调度这个功能可能会造成一些问题, 建议不开这个. 
  2. 如果要开源站资源迁移这个功能, 需要配合缓存配置中将资源缓存时间配置为24小时以上才会触发迁移. 如果要验证缓存时间可以通过浏览器的开发者工具检查响应头的Cache-Control字段, 具体可以看又拍云的这个文档 (https://docs.upyun.com/cdn/guide/#_6). 不过, 除非你了解源站资源迁移的访问机制 (https://help.upyun.com/knowledge-base/cdn-source-resource-move/), 否则不建议开启, 会对资源更新造成一些问题.
  3. 如果你的域名挂靠在Cloudflare, 请勿给根域名(即不带任何前缀, 主机记录为@的那个域名 )做CNAME解析(例如, 不能为merack.top添加又拍云的CNAME记录), 因为根据RFC1912,域名根域名不得存在 CNAME 记录,根域名的 CNAME 记录会与域名的 MX 邮箱记录、TXT 域名验证记录发生冲突, Cloudflare会将该CNAME记录展平(CNAME flattening), 指向的是又拍云在国外的某个节点, 无论国内国外访问都是请求的这个节点的资源, 那么这就失去了CDN的功能.

结语

到此又拍云CDN加速GitHub Pages就配置完成了, 本文只是我配置时的一些简要记录, 仅供参考. 如果遇到问题可以通过邮件与我交流. 像其他的一些静态网站加速, 例如GitLab, Vercel, Netlify, Cloudflare Pages, 思路应该也大致相同, 但还是要根据不同平台调整.