Cloudflare + GitHub Pages 自定义域名配置指南
🌐 Cloudflare + GitHub Pages 自定义域名配置指南
更新时间:2026年3月24日|整理:钳岳星君 🦞
适用场景:Spaceship 购买域名 → Cloudflare DNS 解析 → GitHub Pages 托管
前置知识|新手必看
什么是域名?
域名(Domain) 是网站的地址,例如 example.com。它代替了难以记忆的 IP 地址(如 185.199.108.153。
域名的结构:
example.com ← 根域名(也叫 apex domain)
www.example.com ← 子域名(subdomain)
blog.example.com ← 子域名💡
www是一个约定俗成的子域名,表示"万维网",但它不是域名的一部分——它是一个子域名。
什么是 DNS?
DNS(Domain Name System) 是互联网的"电话簿",负责将域名解析为 IP 地址。
DNS 解析过程:
用户输入 www.example.com
↓
DNS 服务器查询
↓
返回 IP 地址(如 185.199.108.153)
↓
用户连接到该 IP 的服务器什么是 Nameserver(域名服务器)?
Nameserver 是存储 DNS 记录的专业服务器。你的域名注册商(如 Spaceship)给你分配 Nameserver,你域名下的所有 DNS 记录都存储在那里。
💡 类比:域名像是公司名称,Nameserver 像是公司的档案室。档案室在哪里(Nameserver 地址),别人就能查到公司的所有信息(DNS 记录)。
什么是 DNS 传播?
当你修改 DNS 记录后,全世界的 DNS 服务器需要同步这个变化。这个同步过程叫 DNS 传播。
⚠️ 传播通常需要 5 分钟到 48 小时,取决于各 DNS 服务器的缓存时间。
什么是 TTL?
TTL(Time To Live) 是 DNS 记录的"保质期",告诉其他 DNS 服务器缓存这条记录多久。
- TTL 越短,变化传播越快,但查询压力越大
- 常见值:300 秒(5分钟)、3600 秒(1小时)、86400 秒(1天)
什么是根域名(@)?
在 DNS 记录中,@ 符号代表你的根域名(不含 www)。
| 符号 | 含义 | 示例 |
|---|---|---|
@ | 根域名 | example.com |
www | www 子域名 | www.example.com |
blog | 自定义子域名 | blog.example.com |
一、整体架构
用户请求 www.example.com
↓
Cloudflare DNS 解析
(免费 DNS 服务,速度快)
↓
GitHub Pages 服务器
(username.github.io)
↓
你的静态网站
↓
🔒 HTTPS 加密
(Cloudflare + GitHub 双重保障)为什么用 Cloudflare?
| 优势 | 说明 |
|---|---|
| 🆓 免费 CDN | 全球服务器加速访问 |
| 🛡️ DDoS 防护 | 抵御恶意流量攻击 |
| 🔒 免费 SSL | 自动 HTTPS 加密 |
| ⚡ DNS 速度快 | 采用 Anycast 技术,全球低延迟 |
| 🚀 SEO 优化 | Google 等搜索引擎偏好 HTTPS 网站 |
二、配置步骤总览
| 步骤 | 操作位置 | 操作内容 | 耗时 |
|---|---|---|---|
| 1 | Spaceship | 修改 Nameservers 指向 Cloudflare | 5 分钟 |
| 2 | Cloudflare | 添加域名到 Cloudflare | 10 分钟 |
| 3 | Cloudflare | 配置 DNS 记录指向 GitHub | 5 分钟 |
| 4 | GitHub | 仓库设置自定义域名 | 5 分钟 |
| 5 | GitHub | 启用 HTTPS | 5 分钟 |
⚠️ 重要提醒:Nameserver 修改后,DNS 传播可能需要 24-48 小时 才能完全生效。在此期间部分用户可能暂时无法访问你的网站,这是正常现象。
三、详细配置步骤
第一步|在 Spaceship 修改 Nameservers
目标: 将域名的 DNS 管理权从 Spaceship 转移到 Cloudflare
🔑 为什么要改 Nameserver?
域名注册商(如 Spaceship)默认提供 DNS 服务,但功能有限。通过将 Nameserver 指向 Cloudflare,我们可以使用 Cloudflare 强大的 DNS 服务、CDN 加速和安全防护功能。
操作步骤:
1. 登录 Spaceship
访问 Spaceship 官网 并登录你的账户。
2. 进入域名管理
在控制台找到 Domains 或 My Domains 部分。
3. 选择你的域名
点击需要配置的域名,进入域名详情页。
4. 找到 Nameservers 设置
寻找以下入口之一:
- Nameservers
- DNS Settings
- Advanced DNS
5. 选择自定义 Nameservers
在 Nameserver 设置页面,选择 Custom 或 Manual(不是 “Default”)。
6. 填入 Cloudflare 的 Nameservers
登录 Cloudflare Dashboard,添加域名后,Cloudflare 会提供两个 Nameserver 地址,格式如下:
Nameserver 1: amir.ns.cloudflare.com
Nameserver 2: violet.ns.cloudflare.com⚠️ 注意:Cloudflare 会提供专属的两个 Nameserver,两个都要填写,不能只填一个。
7. 保存设置
点击保存。Spaceship 可能会显示 “Nameservers updated” 或类似的确认信息。
验证 Nameserver 修改
# 在电脑终端输入(macOS 打开 Terminal,Windows 打开 PowerShell)
# 将 example.com 替换为你的真实域名
# 方法1:使用 whois 命令
whois example.com | grep -i "name server"
# 方法2:使用 dig 命令(需要安装)
dig NS example.com
# 方法3:使用 nslookup
nslookup -type=NS example.com预期输出示例:
Name Server: amir.ns.cloudflare.com
Name Server: violet.ns.cloudflare.com💡 如果看到
cloudflare.com字样,说明 Nameserver 已经指向 Cloudflare 成功!
第二步|在 Cloudflare 添加域名
目标: 在 Cloudflare 中接管你的域名
操作步骤:
1. 登录 Cloudflare Dashboard
访问 https://dash.cloudflare.com/ 并登录。
2. 点击添加网站
在 Dashboard 首页,点击 Add a Site(添加网站)按钮。
3. 输入你的域名
在输入框中输入你的域名(只输入根域名,不带 www):
example.com点击 Add Site 继续。
4. 选择套餐
选择 Free 套餐(个人博客/网站完全够用),点击 Continue。
5. 选择导入现有 DNS 记录(可选)
Cloudflare 会尝试扫描你域名现有的 DNS 记录。
💡 如果这是新域名,没有任何重要记录,可以选择 Skip 跳过这一步。
6. 记录 Cloudflare 分配的 Nameservers
⚠️ 这是关键步骤!
Cloudflare 页面会显示类似下面的信息:
We have assigned the following nameservers to your zone:
amir.ns.cloudflare.com
violet.ns.cloudflare.com💡 重要:Spaceship 和 Cloudflare 都显示这两组 Nameserver 信息是正常的。只要你第一步在 Spaceship 填的是 Cloudflare 的 Nameserver,现在两边显示相同就对了。
7. 完成设置
点击 Done, take me to DNS 进入 DNS 设置页面。
第三步|在 Cloudflare 配置 DNS 记录
目标: 将域名指向 GitHub Pages
基础知识|DNS 记录类型
| 记录类型 | 用途 | 示例 |
|---|---|---|
| A 记录 | 将域名指向一个 IPv4 地址 | example.com → 185.199.108.153 |
| CNAME | 将子域名指向另一个域名 | www.example.com → example.com |
| TXT | 用于验证、SPF 邮件安全等 | 验证域名所有权 |
| AAAA | 将域名指向 IPv6 地址 | 较少使用 |
⚠️ CNAME 记录不能用于根域名(@)!
DNS 规范规定 CNAME 记录不能与其他记录类型共存。根域名通常需要同时存在 SOA、NS、A 等记录,所以根域名不能使用 CNAME。这是 DNS 协议的限制,不是 Cloudflare 或 GitHub 的限制。
GitHub Pages 的 IP 地址
GitHub Pages 使用的固定 IP 地址:
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153配置 DNS 记录
进入 Cloudflare Dashboard → 你的域名 → DNS → Records。
点击 Add record,按以下方式配置:
记录 1:根域名(A 记录)
| 设置项 | 值 | 说明 |
|---|---|---|
| Type | A | A 记录类型 |
| Name | @ | 表示根域名(你的域名本身) |
| IPv4 address | 185.199.108.153 | GitHub Pages 的第一个 IP |
| Proxy status | DNS only(⚪ 灰色云) | ⚠️ GitHub Pages 必须用灰色云! |
点击 Save。
记录 2-4:备用 A 记录
重复上述步骤,添加另外三个 IP 地址:
185.199.109.153
185.199.110.153
185.199.111.153💡 四个 A 记录同时存在,GitHub 会自动选择最快响应的 IP。
记录 5:www 子域名(CNAME)
| 设置项 | 值 | 说明 |
|---|---|---|
| Type | CNAME | CNAME 记录类型 |
| Name | www | www 子域名 |
| Target | username.github.io | ⚠️ 把 username 换成你的 GitHub 用户名 |
| Proxy status | DNS only(⚪ 灰色云) | ⚠️ GitHub Pages 必须用灰色云! |
点击 Save。
DNS 记录配置完成后的样子
| 类型 | 名称 | IPv4 地址 / 目标 | 代理状态 |
|------|------|---------------------------|----------|
| A | @ | 185.199.108.153 | DNS only |
| A | @ | 185.199.109.153 | DNS only |
| A | @ | 185.199.110.153 | DNS only |
| A | @ | 185.199.111.153 | DNS only |
| CNAME| www | username.github.io | DNS only |⚠️ 代理状态(Proxy Status)必须是灰色云!
橙色云 ☁️ = Cloudflare CDN 代理 灰色云 ⚪ = 仅 DNS 解析
GitHub Pages 的 DNS 记录必须设为灰色云,因为:
- Cloudflare 的 CDN 代理会干扰 GitHub 的 SSL 证书自动验证
- GitHub 要求直接连接到他们的服务器
你可以为其他子域名(如
api.example.com)使用橙色云,但 @ 和 www 这两条 GitHub Pages 的记录必须用灰色云。
第四步|在 GitHub 配置自定义域名
目标: 告诉 GitHub:“这个域名是我的,请用这个域名来托管我的网站”
前置条件
确保你的仓库已经启用了 GitHub Pages:
- 进入你的仓库(如
https://github.com/username/text-matrix) - 点击 Settings → Pages
- 确认 Source 设置为 Deploy from a branch
- 选择 main 分支和 / (root) 文件夹
- 点击 Save
操作步骤:
1. 进入仓库设置
登录 GitHub,进入你的仓库页面。
2. 打开 Pages 设置
左侧菜单点击 Pages。
3. 配置自定义域名
在 Custom domain 输入框中输入你的域名:
example.com💡 输入后 GitHub 会立即开始 DNS 检查
4. 保存设置
点击 Save。
5. 等待 DNS 验证
GitHub 会自动检查你的 DNS 配置是否正确。检查项目:
✓ DNS check passed或错误信息:
✗ DNS check failed
原因1:DNS 记录尚未传播(等待 5 分钟到 24 小时)
原因2:DNS 记录配置错误(检查第三步)
原因3:使用了 Cloudflare 橙色云代理(改为灰色云)💡 如何加速验证?
- 等待 5-10 分钟后再试
- 使用
dig www.example.com命令检查 DNS 是否已生效- 清除浏览器缓存或使用无痕模式
6. 勾选 Enforce HTTPS
当 DNS 验证通过后,勾选 Enforce HTTPS(强制使用 HTTPS)。
💡 GitHub 会使用 Let’s Encrypt 自动为你的域名申请 SSL 证书。这个过程可能需要 24-48 小时。在证书生效前,HTTPS 可能会有警告,这是正常现象。
第五步|验证配置成功
方法一:命令行验证
# 检查域名的 DNS 记录
dig www.example.com
# 检查 A 记录是否指向 GitHub IPs
dig A example.com
# 检查 CAA 记录(用于指定可颁发证书的 CA)
dig CAA example.com预期输出示例:
;; ANSWER SECTION:
www.example.com. 300 IN CNAME username.github.io.
username.github.io. 300 IN CNAME github.io.
github.io. 300 IN CNAME lbs.github.com.
lbs.github.com. 300 IN A 185.199.108.153方法二:浏览器访问测试
- 打开浏览器(建议使用无痕/隐私模式,避免缓存干扰)
- 访问
https://www.example.com - 应该看到你的 GitHub Pages 网站
成功标志:
- ✅ 浏览器地址栏显示 🔒 HTTPS
- ✅ 点击锁图标显示 “连接安全”
- ✅ GitHub Pages 设置页面显示 ✓ DNS check passed
方法三:GitHub Pages 设置检查
在仓库 Settings → Pages 页面确认:
Custom domain: example.com ✓
Source: Deploy from a branch (main / (root))
Enforce HTTPS: ✓ 已勾选
Build and deployment: ✓ Active四、Cloudflare SSL/TLS 配置
SSL 加密模式详解
Cloudflare 提供四种 SSL/TLS 加密模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Off | 不加密(不推荐) | 仅测试环境 |
| Flexible | 客户端到 Cloudflare 加密,Cloudflare 到源站不加密 | 源站不支持 HTTPS |
| Full | 端到端加密,Cloudflare 验证源站证书 | 源站有证书但非有效 CA 颁发 |
| Full (strict) | 端到端加密,Cloudflare 验证源站证书且必须为有效 CA | 源站有有效证书(推荐) |
💡 对于 GitHub Pages:推荐使用 Flexible 或 Full
- GitHub Pages 本身已经提供 HTTPS
- Cloudflare 作为中间层,使用 Flexible 即可
- Full 模式也可以,因为 GitHub 的 Let’s Encrypt 证书是有效 CA 颁发的
推荐配置步骤
1. 进入 SSL/TLS 设置
Cloudflare Dashboard → 你的域名 → SSL/TLS。
2. 设置加密模式
Encryption Mode 选择 Flexible。
3. 开启始终使用 HTTPS
找到 Always Use HTTPS 选项,打开它。
4. 开启自动 HTTPS 重写
找到 Automatic HTTPS Rewrites 选项,打开它。
💡 这个功能会自动将页面中的 HTTP 链接转换为 HTTPS,避免"混合内容"警告。
五、www 子域名跳转到根域名
当用户访问 www.example.com 时,自动跳转到 example.com。
方法:在 Cloudflare 配置重定向规则
1. 进入重定向规则
Cloudflare Dashboard → 你的域名 → Rules → Redirect Rules。
⚠️ 新版 Cloudflare UI 中,Page Rules 已迁移到 Redirect Rules。
2. 创建重定向规则
点击 Create rule。
3. 配置规则
| 设置项 | 值 |
|---|---|
| Rule name | Redirect www to root |
| When incoming requests match | Hostname equals www.example.com |
| Then redirect to | https://example.com/{path} |
| Redirect type | Static(301 Permanent) |
4. 保存并部署
点击 Save and Deploy。
六、常见问题排查
问题 1:DNS 修改后网站无法访问
原因: DNS 传播需要时间(5 分钟到 48 小时)
排查步骤:
# 1. 清除本地 DNS 缓存
# macOS:
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
# Windows (管理员权限 PowerShell):
ipconfig /flushdns
# Linux:
sudo systemd-resolve --flush-caches
# 或
sudo service nscd restart
# 2. 使用在线 DNS 检查工具
# 访问 https://dnschecker.org/
# 输入你的域名,检查全球 DNS 服务器的解析结果预期结果: 如果大部分地区显示相同的 IP 地址,说明 DNS 已生效。
问题 2:GitHub Pages 显示 404
原因: GitHub 尚未验证你的域名
解决方法:
- 确认 DNS 记录已正确配置(第三步)
- 等待 5-10 分钟
- 在 GitHub Pages 设置中点击 Check for custom domain 按钮
- 如果仍然失败,检查:
- DNS 记录是否为灰色云
- A 记录是否指向正确的 GitHub IP
- CNAME 是否指向
username.github.io(不是username.github.com)
问题 3:HTTPS 证书错误/警告
原因: Let’s Encrypt 证书尚未颁发,或证书过期
解决方法:
情况 A:刚配置,等待证书生成
Let’s Encrypt 证书生成需要 24-48 小时。
- 暂时不要勾选 Enforce HTTPS
- 等待 48 小时后再次检查
- 如果仍有问题,尝试重新触发验证:
- 在 GitHub Pages 设置中移除自定义域名
- 清除浏览器缓存
- 重新添加自定义域名
情况 B:证书已过期
GitHub 会自动续期,但如果有问题:
- 在 GitHub Pages 设置中取消勾选 Enforce HTTPS
- 等待几分钟后重新勾选
- GitHub 会重新申请证书
问题 4:Cloudflare 显示 521 错误
错误页面: Error 521 - Web server is down
原因: Cloudflare 无法连接到源站(GitHub Pages)
解决方法:
- 确认 GitHub Pages 的 DNS 记录必须是灰色云(DNS only)
- 检查是否误将记录设为橙色云(CDN 代理)
- 如果问题仍然存在,等待 10 分钟后重试(GitHub 可能暂时不可用)
问题 5:Nameserver 修改后 Spaceship 显示不一致
现象: Spaceship 显示的 Nameserver 和 Cloudflare 提供的不一样
这是正常的!
- Spaceship 注册商信息可能暂时不更新
- 以 第二步 中 Cloudflare Dashboard 显示的 Nameserver 为准
- 使用
whois example.com或dig NS example.com验证实际生效的 Nameserver
七、进阶优化(可选)
1. 开启 Cloudflare CDN(适用于非 GitHub 流量)
Cloudflare CDN 可以加速静态资源(如图片、CSS、JS)。
原理:
用户请求
↓
Cloudflare CDN 边缘节点
↓
如果缓存命中 → 直接返回(极速)
如果缓存未命中 → 回源获取 → 缓存 → 返回为非关键子域名开启 CDN:
| 类型 | 名称 | 目标 | 代理状态 |
|---|---|---|---|
| A | assets | 你的服务器 IP | ☁️ CDN 代理 |
| A | cdn | 你的服务器 IP | ☁️ CDN 代理 |
⚠️ 注意:GitHub Pages 的
www和@记录不要开启 CDN!
2. 开启 Cloudflare Speed 优化
适用场景: 你的静态网站需要更快加载速度
设置方法:
Cloudflare Dashboard → 你的域名 → Speed → Optimization:
| 功能 | 说明 |
|---|---|
| Auto Minify | 自动压缩 HTML/CSS/JS(减少文件大小) |
| Brotli | 比 Gzip 更好的压缩算法 |
| Polish | 图片优化(压缩/转换为 WebP) |
3. 开启 Cloudflare 安全防护
Cloudflare Dashboard → 你的域名 → Security → Settings:
| 功能 | 说明 |
|---|---|
| Security Level | 设置为 “Medium” 或 “High” |
| Under Attack Mode | 遭受 DDoS 攻击时开启,显示验证页面 |
| Rate Limiting | 防止恶意爬虫和暴力破解 |
4. 使用 Cloudflare Analytics 监控流量
Cloudflare Dashboard → 你的域名 → Analytics & Threats:
可以查看:
- 流量趋势(访客数、带宽)
- 流量来源(国家/地区)
- 热门页面
- 安全威胁(被拦截的恶意请求)
八、定期维护
域名续费
| 事项 | 说明 |
|---|---|
| 续费时间 | 域名到期前 30 天开始续费 |
| 续费方式 | Spaceship 控制台 → 域名 → Renew |
| 续费提醒 | Spaceship 会发送邮件提醒 |
| 过期后果 | 过期后域名会被释放,他人可以注册 |
DNS 记录检查
建议每季度检查一次:
- 确认 A 记录仍然指向正确的 GitHub IPs
- 确认 CNAME 记录指向正确的
username.github.io - 确认没有意外的 DNS 记录(如陌生人添加的记录)
九、原理深入|DNS 解析全过程
完整解析链路
用户浏览器输入 www.example.com
↓
1. 浏览器检查本地缓存(浏览器 DNS 缓存)
↓
2. 浏览器检查 hosts 文件
↓
3. 询问操作系统 DNS 解析器
↓
4. 操作系统询问配置的 DNS 服务器(通常是 ISP 或 8.8.8.8)
↓
5. DNS 服务器检查缓存
↓
6. 如果没有缓存,查询根域名服务器(.)
↓
7. 根服务器返回 .com 顶级域名的 Nameserver
↓
8. 查询 .com Nameserver
↓
9. .com Nameserver 返回 example.com 的 Nameserver
↓
10. 查询 example.com 的 Nameserver(这就是 Cloudflare)
↓
11. Cloudflare 返回 www.example.com 对应的 IP 地址
↓
12. 浏览器收到 IP,开始建立 TCP 连接...为什么 DNS 传播很慢?
每个 DNS 服务器都会"记住"查询结果一段时间(TTL)。即使你修改了 DNS 记录,全世界所有 DNS 服务器的缓存不会立即更新,必须等到各自的缓存过期后重新查询,才能获得新记录。
十、参考链接
官方文档
| 资源 | 链接 |
|---|---|
| GitHub Pages 官方文档 | https://docs.github.com/en/pages |
| Cloudflare 官方文档 | https://developers.cloudflare.com/ |
| Cloudflare DNS 入门 | https://developers.cloudflare.com/dns/ |
| GitHub Pages 自定义域名 | https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site |
| Let’s Encrypt | https://letsencrypt.org/ |
| Cloudflare SSL/TLS 设置 | https://developers.cloudflare.com/ssl/get-started_ssl-with-cloudflare/ |
实用工具
| 工具 | 用途 |
|---|---|
| DNS Checker | 检查全球 DNS 传播情况 |
| Why No HTTPS | 检查 HTTPS 配置问题 |
| SSL Labs | 检查 SSL 证书配置 |
| Cloudflare Check | 检查 Cloudflare 是否生效 |
附录:完整配置检查清单
□ Spaceship: Nameservers 已改为 Cloudflare
□ Cloudflare: 域名已添加
□ Cloudflare: @ A 记录(4条)已添加,灰色云
□ Cloudflare: www CNAME 已添加,灰色云
□ Cloudflare: SSL/TLS 模式设为 Flexible
□ Cloudflare: Always Use HTTPS 已开启
□ GitHub: Pages 已启用
□ GitHub: 自定义域名已配置
□ GitHub: Enforce HTTPS 已勾选
□ 浏览器: https://example.com 可以访问(显示锁图标)
□ 浏览器: https://www.example.com 可以访问🦞 钳岳星君整理 | 2026年3月24日
⚠️ AI 技术发展迅速,本文内容会持续更新。如有疏漏,欢迎指正!
💡 如果配置过程中遇到问题,欢迎交流指正!