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 是腾讯云旗下的域名注册商之一,提供域名解析服务。
- 一些国外组织提供免费域名注册服务。虽然注册的域名是顶级域名的子域名,但是能够用作顶级域名。
常见的域名注册商的情况见以下链接:
- 从域名注册商到 DNS 服务,找到自己的组合 - atpX ,
- 2025 年国外10个域名注册商推荐(有对比表格) - DMthought
- 哪里买域名最便宜?2024下国内及海外域名购买平台对比,注意事项及注册优惠购买 - 知乎
- 2025年各大主流域名服务商汇总 - 鹏叔的技术博客
- ❤️个人域名规划指南❤️
简单地说一下域名情况:
- 主站的域名固定后不要随意变更。(个人站点随意,但链接失效很烦人。)
- 一些域名注册商有套路。比如:首年超低价但续费超贵,绑定销售等。
- 【数字二级域 + new gTLD 一级域】 的组合通常很便宜。大概 8 rmb/首年,180 rmb/十年?
- SEO 对一级域有限制要求。见链接:域名迁移至 blog.liushen.fun | LiuShen’s Blog
- Cloudflare 的所有域名都是成本价。但它旗下的域名无法更改 NS(域名服务器),绑定自家的一条龙服务。
- Spaceship 是 Namecheap 新推出的域名注册子公司。它提供免费的 WHOIS 服务,支持支付宝付款。
.com
顶级域名 6 $/首年(优惠后),续费价格为 10 $/每年。
个人选择:
在 Spaceship 注册的
.com
顶级域名,作为主域名。后续可能将该域名迁移到 Cloudflare 名下。在腾讯云注册的 new gTLD 域名,作为年抛域名。毕竟首年白菜,续费黄金,不划算。当然,如果以之作为主域名,可以一次性购买 10 年,有很便宜的域组合。
1.2 示例:在 Spaceship 注册域名
在 Spaceship 注册 .com
顶级域名有首年优惠,只需 40 rmb。当然,也可以选择注册便宜的域名组合。
请先关闭代理,再连接 Spaceship,否则域名注册可能会失败。
- 注册 Spaceship 账号,登录网站。
- 打开 促销与优惠 - 特别促销代码和折扣 - Spaceship 界面,复制
.com
顶级域优惠码,输入唯一域名,搜索。
- 加入购物车,打开订单界面;继续;粘贴 .com 顶级域优惠码,应用后金额变成 40 rmb,结账。
- 结账;添加支付宝付款。需要先填写地址信息才能付款。
Tip:地址别乱填,请参考 史上最全的中国地址英文地道写法,值得收藏! - 知乎
- 点击域名,打开域名管理器界面;点击域名,打开 名称服务器和DNS 界面。
- 添加 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
域名注册 开启 CNNIC 隐私保护服务_腾讯云(最后更新时间:2024.12) 提到,隐私保护服务仅支持在 DNSPod、腾讯云、广州云讯主体注册的 “.cn” 和 “.中国” 域名后缀,且需付费开启。(Maybe)现如今,腾讯云已取消付费的域名隐私保护服务,实行 RDDS 代替 WHOIS 服务。
Tips:
- 2025.5,笔者在 DNSPod 新注册了 new gTLD,该域名被腾讯云隐藏了所有者的私人信息。因此,笔者推断腾讯云已实行 RDDS 代替 WHOIS 服务。(应该是这样?文档信息反正是过时的。)
- 早期注册的域名若未采用 WHOIS 服务,已暴露的旧私人信息可能仍然是公开的。
在 DNSPod 新注册的 new gTLD:
- 经公共 WHOIS 查询,未查询到域名所有者的私人信息,告知查询者请联系域名注册商;
- 经腾讯云 WHOIS 查询,腾讯云隐藏了域名所有者的私人信息,仅提供表单,用于给域名所有者留信。
1.4 数字证书
服务器 - HTTPS中的“S”究竟意味着什么? - 幸运的行者 - SegmentFault 思否
怎么实现全网站链接的HTTPS安全访问? - 个人文章 - SegmentFault 思否
https - 什么是域名劫持?如何防止域名劫持? - 个人文章 - SegmentFault 思否
如何解决SSL证书部署后未生效或网站显示不安全_腾讯云ssl证书部署后不生效-CSDN博客
SSL 证书的主要作用是对网站进行身份验证和传输数据加密;
SSL 证书是一种数字证书,
2. DNS 及 Github Pages 设置
以归属于 DNSPod 的域名为例,设置域名的 NS 变更为 Cloudflare,使用 Cloudflare 添加 DNS 记录。
在 NS 添加以下两种 DNS 记录:
- A 记录:@(根域名,即
shaton.online
) → Github Pages IP(185.199.108.153
,185.199.109.153
,185.199.110.153
,185.199.111.153
) - 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.online
和www.shaton.online
都能访问该站点。如果仅希望使用blog(or www).shaton.online
访问该站点,请设置该站点绑定域名blog(or www).shaton.online
。
设置 Github Pages 站点绑定 shaton.online
。这样,最终可以通过三个域名(shaton.online
、www.shaton.online
、<username>.github.io
)访问到部署在 Github Pages 的静态博客。
设置完后,cmd.exe 执行命令 ipconfig /flushdns
,刷新本机 DNS 缓存。
虽然 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 设置
- Cloudflare 注册账户
- 点击左上角【CLOUDFLARE 图标】进入 Cloudflare home page,【账户主页】→【添加域】
- 【输入现有域:个人域名】→【快速扫描 DNS 记录】→【继续】
- 进入该域名的设置界面 →【选择 Free 计划】
- 删除 DNS 记录(主要是删除 NS 记录)→【继续前往激活】→ 复制 Cloudflare NS 地址
- 前往域名所在平台更改 NS。
(以归属于 DNSPod 的域名为例,其他平台同理。)
【控制台】→【域名注册】→【我的域名】,点击该域名
【修改 DNS 服务器】→【自定义 DNS】→ 设置为 Cloudflare NS 地址 →【提交】
- 【立即检查名称服务器】,然后等待 Cloudflare 激活该域名。
该域名在 Cloudflare 激活时,Cloudflare 会发送电子邮件。或者,【账户主页】域的状态显示为【活动】。
- 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 仓库的文件可能会变更:
- 被覆盖——本地博客项目该文件的内容变更
- 被删除——本地博客项目无该文件
在 source/
目录下创建 CNAME
文件,添加内容 shaton.online
;以免 hexo d
后,GitHub Pages 设置失效。
2.4 Cloudflare SSL 设置
如果你的域名采用 Cloudflare 作为权威 DNS 名称服务器,Cloudflare 在其激活后会自动为其申请通用 SSL 证书。此证书涵盖你的顶级域名(example.com
)和所有一级子域名(subdomain.example.com
)。通用 SSL 证书有效期是 90 天,Cloudflare 会自动续订。
- 【SSL/TLS | 概述】,【SSL/TLS 加密】设置为完全(full)模式,以便自动配置 SSL/TLS 证书。即访问者与 Cloudflare 之间、Cloudflare 与源服务器之间均采用加密。
概念 ·Cloudflare SSL/TLS 文档 — Concepts · Cloudflare SSL/TLS docs
- 【SSL/TLS | 边缘证书】,启用【始终使用 HTTPS】。在访问者与 Cloudflare 之间生效。
附录
使用 HTTPS 保护 GitHub Pages 站点 - GitHub 文档
CNAME 记录不能与 A 记录重复。 比如,已经添加 A 记录:@(根域名) → Github Page IP,不能再添加 CNAME 记录:根域名 → <username>.github.io
。
nslookup 命令行工具用于诊断域名系统基础结构的信息。
Github Pages 绑定经 Cloudflare 解析的域名,无法强制开启 HTTPS 的原因:
- Github Pages 从 Let’s Encrypt 请求的 TLS 证书,与 Cloudflare 自动申请的 SSL/TLS 证书冲突
- Github Pages 站点通过 HTTP 引用资源
- 忘了,思索中……