4

GitHub pages配置自定义域名利用Cloudflare全球CDN

 1 year ago
source link: https://ttzz.eu.org/posts/2022-09-28-github-pages-custom-domain-name/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

关于 GitHub pages

GitHub pages 是 github 提供免费静态站点托管服务,并提供域名 xxx.github.io,xxx 是你 GitHub 账户的名称。一个账户只能托管一个 GitHub pages 项目。

官方文档介绍如下:

GitHub Pages 是一项静态站点托管服务,它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件,(可选)通过构建过程运行文件,然后发布网站。 可以在 GitHub Pages 示例集合中看到 GitHub Pages 站点的示例。

你可以在 GitHub 的 github.io 域或自己的自定义域上托管站点。 有关详细信息,请参阅 “将自定义域与 GitHub Pages 配合使用”。

关于 Cloudflare

Cloudflare(Cloudflare, Inc.)是一家总部位于旧金山的美国跨国科技企业,以向客户提供基于反向代理内容分发网络(Content Delivery Network, CDN)及分布式域名解析服务(Distributed Domain Name Server)为主要业务。

我们主要用到他两个服务:

域名服务器

任一传播网络的免费域名服务器(DNS)。根据 W3Cook,Cloudflare 的 DNS 服务目前所服务的对象超过受管理 DNS 网域的 35%。SolveDNS 发现 Cloudflare 能持续提供全球数一数二的 DNS 查阅速度,在 2016 年 4 月回报的查阅速度为 8.66 毫秒。[23]

内容分发网络 (CDN)

Cloudflare 的网络在全球拥有许多连线到互联网交换点的连线。Cloudflare 会将内容缓存到其边缘位置,以扮演内容提供网络(CDN)的角色,所有要求接着会透过 Cloudflare 进行反向 Proxy 处理,并直接从 Cloudflare 提供缓存的内容。

Cloudflare 推出了中国大陆地区的服务,帮助所有企业改善他们的互联网应用的性能及安全并扩展其全球业务。Cloudflare 最初以百度为合作伙伴,但之后转而与京东云合作。Cloudflare 和京东云的合作节点预计将在 2023 年扩展到中国大陆的 150 个地点。

  • 一个 GitHub pages 站点。
  • 一个自己的域名,并交由 cloudflare 提供域名解析服务。

个人域名可以购买国内外域名服务商的域名,区别是国内的域名的需要备案,国外不用。

免费的域名注册,目前据我收集到的市面有两个渠道,一个 freenom,一个 eu.org

freenom 可以注册.tk、.ml、.ga、.cf、.gq 这些免费顶级域名,有效期 1 年,一年到期前一周可续,否则会被回收。

eu.org 是欧盟推出的免费域名服务,从 1996 年至今,虽是二级域名,但完全可以当一级域名使用,永久免费。我回头再整理一个教程。

自定义域名配置

DNS 解析配置

ping 自己的 github pages 域名 xxx.github.io,可查看它的 ip,当前 github io 服务器为以下 4 个,ip 在四个里随机变化。

https://s3.bmp.ovh/imgs/2022/09/28/49163b5c22c497b1.png

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

进到 cloudflare 管理平台,域名管理添加一条 www 的 CNAME 记录,指向你自己的 github.io 域名 xxx.github.io。这一步可以将你的个人域名转向 xxx.github.io,io 域名再去解析到那 4 个 ip 中的一个。

或者直接添加 4 条 A 记录,将你跟域名直接指向上面 4 个 ip。这步使你个人域名直接转向 github.io 的 ip。

github 官方的建议是采用添加 CNAME 记录,这样 github.io 的 ip 变化后不会不会受影响。 https://s3.bmp.ovh/imgs/2022/10/04/9f3ad9f96fb55a20.png

github 配置

  1. 在你 github pages 项目根目录,添加一个文件名为 CNAME 文件(注意文件不要有后缀), 文件里输入你 DNS 配置的个人域名。即可完成。 https://s3.bmp.ovh/imgs/2022/10/03/948e4b01e19aabcf.png

  2. 你也可以直接进到个人 GitHub pages 那个项目,GitHub pages -> setting 设置,custom domain 里添加保存你个人域名。这个操作实际对应也是生成 1 步骤的 CNAME 文件。效果一样的。 https://s3.bmp.ovh/imgs/2022/10/03/7ba48e38c264d283.png

注意: 如果你 github pages 静态网站是通过 github action 自动编译生成的话,需要在编译前的项目对应的生成 pages 的根目录里添加这个 CNAME 文件,因为每次编译生成都会清空你原 GitHub pages 项内容,主流静态博客(hugo,hexo 等)的话基本是 static 目录,这个目录的文件编译后全部都在生成的静态网站根目录里。

通过以上配置,等域名配置生效后,一般需要 24 小时,不过我设置后一会就直接生效,即可通过个人域名访问,cloudflare 配置域名默认启用 cdn 代理,速度会比直接访问 github.io 快很多。

我们可以 ping 一下配置后个人域名的地址,会发现已经不是 github.io 的那 4 个了,而是 cloudflare 的 cdn 代理服务器。

https://s3.bmp.ovh/imgs/2022/10/03/af31c01ce6029d6d.png

关于无法 Enforce HTTPS

配置到这里,大家会发现无法启用 github 的强制 https,这是因为 cloudflare 默认启用了 http/dns 代理功能,也就是 cdn 代理,导致 github 无法查看生成 https 证书所需的 dns 记录,对于指向 github 的任何 dns 记录,都要禁用该选项,才能启用 Enforce HTTPS。

不过你在的 cloudflare 上直接启用 https 即可,这里本来就要利用它的 cdn 来进行访问加速。

参考资料:

github docs https://docs.github.com/cn/pages/getting-started-with-github-pages/about-github-pages
Cloudflare https://zh.wikipedia.org/wiki/Cloudflare GitHub Pages 自定义域名使用 Cloudflare 无法 Enforce HTTPS 解决方法 https://blog.imfang.net/web/118.html

关注一下有惊喜
wxqr.png 公众号
赞赏支持
wechatpay.png 微信打赏 alipay.png 支付宝打赏

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK