目录

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
wwwwww 子域名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 网站

二、配置步骤总览

步骤操作位置操作内容耗时
1Spaceship修改 Nameservers 指向 Cloudflare5 分钟
2Cloudflare添加域名到 Cloudflare10 分钟
3Cloudflare配置 DNS 记录指向 GitHub5 分钟
4GitHub仓库设置自定义域名5 分钟
5GitHub启用 HTTPS5 分钟

⚠️ 重要提醒:Nameserver 修改后,DNS 传播可能需要 24-48 小时 才能完全生效。在此期间部分用户可能暂时无法访问你的网站,这是正常现象。


三、详细配置步骤

第一步|在 Spaceship 修改 Nameservers

目标: 将域名的 DNS 管理权从 Spaceship 转移到 Cloudflare

🔑 为什么要改 Nameserver?

域名注册商(如 Spaceship)默认提供 DNS 服务,但功能有限。通过将 Nameserver 指向 Cloudflare,我们可以使用 Cloudflare 强大的 DNS 服务、CDN 加速和安全防护功能。

操作步骤:

1. 登录 Spaceship

访问 Spaceship 官网 并登录你的账户。

2. 进入域名管理

在控制台找到 DomainsMy Domains 部分。

3. 选择你的域名

点击需要配置的域名,进入域名详情页。

4. 找到 Nameservers 设置

寻找以下入口之一:

  • Nameservers
  • DNS Settings
  • Advanced DNS

5. 选择自定义 Nameservers

在 Nameserver 设置页面,选择 CustomManual(不是 “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.com185.199.108.153
CNAME将子域名指向另一个域名www.example.comexample.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 → 你的域名 → DNSRecords

点击 Add record,按以下方式配置:

记录 1:根域名(A 记录)

设置项说明
TypeAA 记录类型
Name@表示根域名(你的域名本身)
IPv4 address185.199.108.153GitHub Pages 的第一个 IP
Proxy statusDNS 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)

设置项说明
TypeCNAMECNAME 记录类型
Namewwwwww 子域名
Targetusername.github.io⚠️ 把 username 换成你的 GitHub 用户名
Proxy statusDNS 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 记录必须设为灰色云,因为:

  1. Cloudflare 的 CDN 代理会干扰 GitHub 的 SSL 证书自动验证
  2. GitHub 要求直接连接到他们的服务器

你可以为其他子域名(如 api.example.com)使用橙色云,但 @ 和 www 这两条 GitHub Pages 的记录必须用灰色云。


第四步|在 GitHub 配置自定义域名

目标: 告诉 GitHub:“这个域名是我的,请用这个域名来托管我的网站”

前置条件

确保你的仓库已经启用了 GitHub Pages:

  1. 进入你的仓库(如 https://github.com/username/text-matrix
  2. 点击 SettingsPages
  3. 确认 Source 设置为 Deploy from a branch
  4. 选择 main 分支和 / (root) 文件夹
  5. 点击 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

方法二:浏览器访问测试

  1. 打开浏览器(建议使用无痕/隐私模式,避免缓存干扰)
  2. 访问 https://www.example.com
  3. 应该看到你的 GitHub Pages 网站

成功标志:

  • ✅ 浏览器地址栏显示 🔒 HTTPS
  • ✅ 点击锁图标显示 “连接安全”
  • ✅ GitHub Pages 设置页面显示 ✓ DNS check passed

方法三:GitHub Pages 设置检查

在仓库 SettingsPages 页面确认:

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 → 你的域名 → RulesRedirect Rules

⚠️ 新版 Cloudflare UI 中,Page Rules 已迁移到 Redirect Rules。

2. 创建重定向规则

点击 Create rule

3. 配置规则

设置项
Rule nameRedirect www to root
When incoming requests matchHostname equals www.example.com
Then redirect tohttps://example.com/{path}
Redirect typeStatic(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 尚未验证你的域名

解决方法:

  1. 确认 DNS 记录已正确配置(第三步)
  2. 等待 5-10 分钟
  3. 在 GitHub Pages 设置中点击 Check for custom domain 按钮
  4. 如果仍然失败,检查:
    • DNS 记录是否为灰色云
    • A 记录是否指向正确的 GitHub IP
    • CNAME 是否指向 username.github.io(不是 username.github.com

问题 3:HTTPS 证书错误/警告

原因: Let’s Encrypt 证书尚未颁发,或证书过期

解决方法:

情况 A:刚配置,等待证书生成

Let’s Encrypt 证书生成需要 24-48 小时

  1. 暂时不要勾选 Enforce HTTPS
  2. 等待 48 小时后再次检查
  3. 如果仍有问题,尝试重新触发验证:
    • 在 GitHub Pages 设置中移除自定义域名
    • 清除浏览器缓存
    • 重新添加自定义域名

情况 B:证书已过期

GitHub 会自动续期,但如果有问题:

  1. 在 GitHub Pages 设置中取消勾选 Enforce HTTPS
  2. 等待几分钟后重新勾选
  3. GitHub 会重新申请证书

问题 4:Cloudflare 显示 521 错误

错误页面: Error 521 - Web server is down

原因: Cloudflare 无法连接到源站(GitHub Pages)

解决方法:

  1. 确认 GitHub Pages 的 DNS 记录必须是灰色云(DNS only)
  2. 检查是否误将记录设为橙色云(CDN 代理)
  3. 如果问题仍然存在,等待 10 分钟后重试(GitHub 可能暂时不可用)

问题 5:Nameserver 修改后 Spaceship 显示不一致

现象: Spaceship 显示的 Nameserver 和 Cloudflare 提供的不一样

这是正常的!

  • Spaceship 注册商信息可能暂时不更新
  • 第二步 中 Cloudflare Dashboard 显示的 Nameserver 为准
  • 使用 whois example.comdig NS example.com 验证实际生效的 Nameserver

七、进阶优化(可选)

1. 开启 Cloudflare CDN(适用于非 GitHub 流量)

Cloudflare CDN 可以加速静态资源(如图片、CSS、JS)。

原理:

用户请求
    ↓
Cloudflare CDN 边缘节点
    ↓
如果缓存命中 → 直接返回(极速)
如果缓存未命中 → 回源获取 → 缓存 → 返回

为非关键子域名开启 CDN:

类型名称目标代理状态
Aassets你的服务器 IP☁️ CDN 代理
Acdn你的服务器 IP☁️ CDN 代理

⚠️ 注意:GitHub Pages 的 www@ 记录不要开启 CDN!

2. 开启 Cloudflare Speed 优化

适用场景: 你的静态网站需要更快加载速度

设置方法:

Cloudflare Dashboard → 你的域名 → SpeedOptimization

功能说明
Auto Minify自动压缩 HTML/CSS/JS(减少文件大小)
Brotli比 Gzip 更好的压缩算法
Polish图片优化(压缩/转换为 WebP)

3. 开启 Cloudflare 安全防护

Cloudflare Dashboard → 你的域名 → SecuritySettings

功能说明
Security Level设置为 “Medium” 或 “High”
Under Attack Mode遭受 DDoS 攻击时开启,显示验证页面
Rate Limiting防止恶意爬虫和暴力破解

4. 使用 Cloudflare Analytics 监控流量

Cloudflare Dashboard → 你的域名 → Analytics & Threats

可以查看:

  • 流量趋势(访客数、带宽)
  • 流量来源(国家/地区)
  • 热门页面
  • 安全威胁(被拦截的恶意请求)

八、定期维护

域名续费

事项说明
续费时间域名到期前 30 天开始续费
续费方式Spaceship 控制台 → 域名 → Renew
续费提醒Spaceship 会发送邮件提醒
过期后果过期后域名会被释放,他人可以注册

DNS 记录检查

建议每季度检查一次

  1. 确认 A 记录仍然指向正确的 GitHub IPs
  2. 确认 CNAME 记录指向正确的 username.github.io
  3. 确认没有意外的 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 Encrypthttps://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 技术发展迅速,本文内容会持续更新。如有疏漏,欢迎指正!

💡 如果配置过程中遇到问题,欢迎交流指正!