GitHubPages自定义域名

本文最后更新于 2025年5月18日 晚上

域名是互联网中用来唯一标识网站或资源的字符地址,通过域名系统(DNS)与对应的 IP 地址关联,方便用户访问。GitHub Pages 支持自定义域名,取代默认且固定的域名 <username>.github.io

虽然域名注册商一般也提供域名解析服务,但是笔者选择使用 Cloudflare 托管域名解析(以 Cloudflare 作为域名的权威 DNS 名称服务器,添加 DNS 记录)。因为 Cloudflare 有 Free Plan,提供 DDos 保护、Universal SSL 证书、全球 CDN 等基础服务,足够个人网站日常使用。

Cloudflare、DDos(distributed denial-of-service attack,分布式拒绝服务攻击),SSL/TLS(网络通信的安全协议之一),CDN(Content Delivery Network,内容分发网络),请粗览维基百科。

关于全球 CDN,详情见下篇博文——“GitHubPages访问优化”。

1. 域名

域名相关的概念请参考 “个人博客 | 建站流程与 Github Pages“。

1.1 注册域名

顶级域名(Apex Domain)付费注册可以选择国内域名注册商或国外域名注册商。

  • 国内域名注册商,比如 腾讯云阿里云,注册的域名需要实名认证。DNS 解析也需要备案,而备案需要购买服务器。DNSPod 解析域名免费,注册 SSL 证书免费,但是将 SSL 证书部署到站点需要付费。
  • 国外域名不需要实名认证和备案。邮箱和地址可能会要求用户认真填写。

Tips:

  • DNSPod 是腾讯云旗下的域名注册商之一,提供域名解析服务。
  • 一些国外组织提供免费域名注册服务。虽然注册的域名是顶级域名的子域名,但是能够用作顶级域名。

📢 重要通知:US.KG 域名暂停及迁移至 DPDNS.ORG - 知乎

永久免费域名us.kg保姆级申请过程

申请 eu.org 免费域名 | EdNovas 的小站


常见的域名注册商的情况见以下链接:

简单地说一下域名情况:

  1. 主站的域名固定后不要随意变更。(个人站点随意,但链接失效很烦人。)
  2. 一些域名注册商有套路。比如:首年超低价但续费超贵,绑定销售等。
  3. 【数字二级域 + new gTLD 一级域】 的组合通常很便宜。大概 8 rmb/首年,180 rmb/十年?
  4. SEO 对一级域有限制要求。见链接:域名迁移至 blog.liushen.fun | LiuShen’s Blog
  5. Cloudflare 的所有域名都是成本价。但它旗下的域名无法更改 NS(域名服务器),绑定自家的一条龙服务。
  6. Spaceship 是 Namecheap 新推出的域名注册子公司。它提供免费的 WHOIS 服务,支持支付宝付款。.com 顶级域名 6 $/首年(优惠后),续费价格为 10 $/每年。

个人选择:

  1. 在 Spaceship 注册的 .com 顶级域名,作为主域名。后续可能将该域名迁移到 Cloudflare 名下。

  2. 在腾讯云注册的 new gTLD 域名,作为年抛域名。毕竟首年白菜,续费黄金,不划算。当然,如果以之作为主域名,可以一次性购买 10 年,有很便宜的域组合。

1.2 示例:在 Spaceship 注册域名

在 Spaceship 注册 .com 顶级域名有首年优惠,只需 40 rmb。当然,也可以选择注册便宜的域名组合。

请先关闭代理,再连接 Spaceship,否则域名注册可能会失败。

  1. 注册 Spaceship 账号,登录网站。
  2. 打开 促销与优惠 - 特别促销代码和折扣 - Spaceship 界面,复制 .com 顶级域优惠码,输入唯一域名,搜索。

  1. 加入购物车,打开订单界面;继续;粘贴 .com 顶级域优惠码,应用后金额变成 40 rmb,结账。

  1. 结账;添加支付宝付款。需要先填写地址信息才能付款。

Tip:地址别乱填,请参考 史上最全的中国地址英文地道写法,值得收藏! - 知乎

  1. 点击域名,打开域名管理器界面;点击域名,打开 名称服务器和DNS 界面。

  1. 添加 DNS 记录是生效于 Spaceship 名称服务器。可以更改 NS,输入 NS 地址,在 NS 处添加 DNS 记录。

1.3 WHOIS 服务

域名注册商一般都会提供 WHOIS 服务(付费/免费),该服务十分重要。如果未采用该服务,则 WHOIS 数据库会公开域名注册数据目录的所有数据,这会暴露域名所有者的私人信息(name、邮箱等)。

近年来,ICANN 致力于使用 RDDS 取代 WHOIS 服务。查询者想获取域名所有者的私人信息必须联系域名注册商,域名注册商自行决定是否公开域名所有者的私人信息。

dns - What is RDDS service and how to query the RDDS service - Super User

Understanding RDDS Responses - slide version

附加注册数据目录服务 (Registration Data Directory Service, RDDS) 信息政策 - ICANN

注册数据目录服务 (RDDS) 路线图的最新资讯有哪些?

域名注册 开启 CNNIC 隐私保护服务_腾讯云(最后更新时间:2024.12) 提到,隐私保护服务仅支持在 DNSPod、腾讯云、广州云讯主体注册的 “.cn”“.中国” 域名后缀,且需付费开启。(Maybe)现如今,腾讯云已取消付费的域名隐私保护服务,实行 RDDS 代替 WHOIS 服务。

Tips:

  • 2025.5,笔者在 DNSPod 新注册了 new gTLD,该域名被腾讯云隐藏了所有者的私人信息。因此,笔者推断腾讯云已实行 RDDS 代替 WHOIS 服务。(应该是这样?文档信息反正是过时的。)
  • 早期注册的域名若未采用 WHOIS 服务,已暴露的旧私人信息可能仍然是公开的。

在 DNSPod 新注册的 new gTLD:

  1. 经公共 WHOIS 查询,未查询到域名所有者的私人信息,告知查询者请联系域名注册商;

  1. 经腾讯云 WHOIS 查询,腾讯云隐藏了域名所有者的私人信息,仅提供表单,用于给域名所有者留信。

1.4 数字证书

服务器 - HTTPS中的“S”究竟意味着什么? - 幸运的行者 - SegmentFault 思否

怎么实现全网站链接的HTTPS安全访问? - 个人文章 - SegmentFault 思否

https - 什么是域名劫持?如何防止域名劫持? - 个人文章 - SegmentFault 思否

了解数字证书 - 独钓寒江雪

如何解决SSL证书部署后未生效或网站显示不安全_腾讯云ssl证书部署后不生效-CSDN博客

SSL 证书的主要作用是对网站进行身份验证和传输数据加密;

SSL 证书是一种数字证书,

2. DNS 及 Github Pages 设置

配置 GitHub Pages 站点的自定义域 - GitHub 文档

Cloudflare 简易接入指南 | Indie Hacker Tools

以归属于 DNSPod 的域名为例,设置域名的 NS 变更为 Cloudflare,使用 Cloudflare 添加 DNS 记录。

在 NS 添加以下两种 DNS 记录:

  1. A 记录:@(根域名,即 shaton.online) → Github Pages IP(185.199.108.153185.199.109.153185.199.110.153185.199.111.153
  2. CNAME 记录:www(即 www.shaton.online) → shaton.online

shaton.online 访问 Github Pages IP;www.shaton.online 转发到 shaton.online


Github Pages 站点仅支持绑定单域名;www 子域名除外。如果 www 子域的 CNAME 配置正确,它会自动重定向到 apex domain。

Tip:如果设置 Github Pages 站点绑定域名 shaton.online,则 shaton.onlinewww.shaton.online 都能访问该站点。如果仅希望使用 blog(or www).shaton.online 访问该站点,请设置该站点绑定域名 blog(or www).shaton.online

设置 Github Pages 站点绑定 shaton.online 。这样,最终可以通过三个域名(shaton.onlinewww.shaton.online<username>.github.io)访问到部署在 Github Pages 的静态博客。

设置完后,cmd.exe 执行命令 ipconfig /flushdns ,刷新本机 DNS 缓存。

如何刷新本机DNS缓存(Win+Linux+OSX)_uos刷新dns缓存-CSDN博客


虽然 Spaceship/DNSPod 也提供域名解析服务,但是笔者选择使用 Cloudflare 托管域名解析。因为 Cloudflare 有 Free Plan,提供 DDos 保护、Universal SSL 证书、全球 CDN 等基础服务,足够个人网站日常使用。

Cloudflare、DDos(distributed denial-of-service attack,分布式拒绝服务攻击),SSL/TLS(网络通信的安全协议之一),CDN(Content Delivery Network,内容分发网络),请粗览维基百科。

关于全球 CDN,详情见下篇博文——“GitHubPages访问优化”。

2.1 Cloudflare DNS 设置

  1. Cloudflare 注册账户
  2. 点击左上角【CLOUDFLARE 图标】进入 Cloudflare home page,【账户主页】→【添加域】

  1. 【输入现有域:个人域名】→【快速扫描 DNS 记录】→【继续】

  1. 进入该域名的设置界面 →【选择 Free 计划】

  1. 删除 DNS 记录(主要是删除 NS 记录)→【继续前往激活】→ 复制 Cloudflare NS 地址

  1. 前往域名所在平台更改 NS。

(以归属于 DNSPod 的域名为例,其他平台同理。)

【控制台】→【域名注册】→【我的域名】,点击该域名

image-20250516031708730

【修改 DNS 服务器】→【自定义 DNS】→ 设置为 Cloudflare NS 地址 →【提交】

  1. 【立即检查名称服务器】,然后等待 Cloudflare 激活该域名。

该域名在 Cloudflare 激活时,Cloudflare 会发送电子邮件。或者,【账户主页】域的状态显示为【活动】。

  1. Cloudflare NS 添加 DNS 记录。

该域名的设置界面 →【DNS | 记录】→【添加记录】(按图操作)

添加 4 条 A 记录,使得根域名绑定 Github Pages IP。代理状态是 Cloudflare 提供的 CDN 服务。

添加 1 条 CNAME 记录,使得 www 子域名转发到根域名。

2.2 Github Pages 设置

在 Github Pages 仓库根目录下创建 CNAME(name 固定)文件,添加内容 shaton.online

或者,按下图操作,达到上面的效果。

2.3 本地博客项目添加 CNAME 文件

执行 hexo d 命令后,Github Pages 仓库的文件可能会变更:

  1. 被覆盖——本地博客项目该文件的内容变更
  2. 被删除——本地博客项目无该文件

source/ 目录下创建 CNAME 文件,添加内容 shaton.online;以免 hexo d 后,GitHub Pages 设置失效。

2.4 Cloudflare SSL 设置

如果你的域名采用 Cloudflare 作为权威 DNS 名称服务器,Cloudflare 在其激活后会自动为其申请通用 SSL 证书。此证书涵盖你的顶级域名(example.com)和所有一级子域名(subdomain.example.com)。通用 SSL 证书有效期是 90 天,Cloudflare 会自动续订。

  1. 【SSL/TLS | 概述】,【SSL/TLS 加密】设置为完全(full)模式,以便自动配置 SSL/TLS 证书。即访问者与 Cloudflare 之间、Cloudflare 与源服务器之间均采用加密。

概念 ·Cloudflare SSL/TLS 文档 — Concepts · Cloudflare SSL/TLS docs

  1. 【SSL/TLS | 边缘证书】,启用【始终使用 HTTPS】。在访问者与 Cloudflare 之间生效。

附录

某个 WHOIS 查询网站

使用 HTTPS 保护 GitHub Pages 站点 - GitHub 文档

CNAME 记录不能与 A 记录重复。 比如,已经添加 A 记录:@(根域名) → Github Page IP,不能再添加 CNAME 记录:根域名 → <username>.github.io


nslookup 命令行工具用于诊断域名系统基础结构的信息。

nslookup | Microsoft Learn

image-20250518180810888


Github Pages 绑定经 Cloudflare 解析的域名,无法强制开启 HTTPS 的原因:

  1. Github Pages 从 Let’s Encrypt 请求的 TLS 证书,与 Cloudflare 自动申请的 SSL/TLS 证书冲突
  2. Github Pages 站点通过 HTTP 引用资源
  3. 忘了,思索中……

GitHubPages自定义域名
https://cornst.com/posts/GitHubPages自定义域名.html
作者
shaton沙桐
发布于
2025年4月29日
更新于
2025年5月18日
许可协议