目标:从零开始选购域名,绑定至 GitHub Pages 静态网站,拥有免费、自带 HTTPS 绿锁、自动续期 SSL 证书的独立域名网站。 特性:全程零服务器费用,无需维护后端,适合 HTML/CSS/JS、Hexo、Hugo、VuePress、VitePress 等静态站点。
| 🔍 搜索关键词 / 遇到的问题 | 💡 核心原因与速解 | 📖 对应章节 |
|---|---|---|
| 买完域名怎么选? / 腾讯云实名认证 | 国内域名必须先过实名审核,无需买服务器,托管选 GitHub Pages 即可 | 第 1 章 · 第 2 章 |
| 仓库怎么建? / 仓库名必须叫什么 | 必须公开(Public),仓库名严格为 <你的GitHub用户名>.github.io |
第 4 章 |
| TXT 验证记录怎么填? / 所有权验证 | 主机记录填 _github-pages-challenge-<用户名>(不能带域名后缀),记录值贴长串字符 |
第 5 章 |
ERR_EMPTY_RESPONSE / 打不开网站 |
DNS 记录未生效、缺少 A/CNAME 解析或 Pages 发布配置有误 | 第 6 章 · 第 10 章 |
| DNSPod 报“负载均衡超出套餐限制” | 当前套餐限制同主机记录数量,按套餐支持添加(GitHub 官方推荐 4 条 A 记录) | 第 6.2 节 |
| CNAME 解析失效 / 报错 | 核对目标主机名和 DNS 记录格式;控制台是否显示末尾根点 . 取决于服务商 |
第 6.3 节 |
| 访问出现 404 Not Found | 根目录缺少 index.html、放进了子文件夹,或文件名大小写错误(必须全小写) |
第 7 章 |
Enforce HTTPS 是灰色的勾选不了 |
DNS 解析尚未完全生效,或 Let's Encrypt 证书正在签发(需 5~30 分钟),勿重复点保存 | 第 8 章 · 第 10 章 |
| 浏览器提示“网站不安全” | 证书未签发完成;无需去服务商下载证书,GitHub 会全自动签发并定期轮换 | 第 8 章 · 附录 A |
| 如何用命令行自检 DNS 状态 | 使用 nslookup 你的域名 或 ipconfig /flushdns 刷新本地 DNS 缓存 |
第 9 章 |
为方便开发者在 GitHub 站内及搜索引擎中检索,本仓库涵盖以下高频搜索主题:
- 核心概念:
GitHub Pages,自定义域名 (Custom Domain),独立域名建站,静态网站托管,DNS 解析,免费建站 - 解析与记录:
DNSPod,腾讯云域名,A 记录 (185.199.108.153),CNAME 别名解析,TXT 验证记录,_github-pages-challenge - 安全与证书:
HTTPS 强制启用 (Enforce HTTPS),SSL 证书自动续期,Let's Encrypt,DV 证书区别 - 故障排查:
ERR_EMPTY_RESPONSE,404 Not Found,DNS Check Failed,DNS Check in Progress,子域名负载均衡超限
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153
注:建议按服务商套餐支持数量配置(官方推荐 4 条;若免费套餐限制同主机记录数量,按最大允许数量配置)。
| 类型 | 主机记录 | 记录值 | 关键细节 |
|---|---|---|---|
| TXT | _github-pages-challenge-<用户名> |
<GitHub 生成的随机字符> |
可选:用于账户级域名所有权验证(Verified domains) |
| A | @ |
185.199.108.153 |
主域名解析节点(推荐配置 4 个 IP) |
| CNAME | www |
<你的GitHub用户名>.github.io |
www 子域名解析(根点是否显示视控制台而定) |
- 第 0 章 开始之前:先看懂全流程
- 第 1 章 购买域名(以腾讯云为例)
- 第 2 章 确定托管方式:为什么选 GitHub Pages
- 第 3 章 注册 GitHub 账号
- 第 4 章 创建 GitHub Pages 专用仓库
- 第 5 章 域名所有权验证(TXT 记录)
- 第 6 章 配置 DNS 解析记录(让域名指向 GitHub)
- 第 7 章 上传首页文件 index.html
- 第 8 章 绑定自定义域名 + 开启 HTTPS
- 第 9 章 访问测试与命令行诊断
- 第 10 章 常见问题排查表
- 附录 A:关于域名与 SSL 证书的常见疑问
- 附录 B:服务器方案要点速查(升级备用)
- 附录 C:日常维护清单
| 阶段 | 做什么 | 花费 | 耗时 |
|---|---|---|---|
| 1 | 购买域名 + 实名认证 | 几十元/年 | 支付即时,实名审核约几分钟~1个工作日 |
| 2 | 注册 GitHub 账号 | 免费 | 几分钟 |
| 3 | 创建 Pages 专用仓库 | 免费 | 几分钟 |
| 4 | 域名所有权验证(TXT) | 免费 | 几分钟 + DNS 生效 5~15 分钟 |
| 5 | 配置 DNS 解析(A / CNAME) | 免费 | 几分钟 + DNS 生效 10~30 分钟 |
| 6 | 上传首页文件 index.html | 免费 | 几分钟 |
| 7 | 绑定域名 + 开启 HTTPS | 免费 | 证书签发几分钟~几十分钟 |
| 8 | 访问测试 | 免费 | 即时 |
两个概念先分清(很重要):
- TXT 验证记录:用于 GitHub 账户级域名所有权验证(可选安全措施),建议开启以降低域名在平台被抢占风险。
- A / CNAME 解析记录:把域名流量指向 GitHub Pages,用于真正访问网站;仓库 Custom domain 与 Pages 发布配置需保持一致。
- TXT 验证不是网站发布或 DNS 解析的前置条件;配置正确解析记录才是让网站正常访问的关键。
域名服务商可选腾讯云、阿里云、华为云等,流程大同小异。本教程以腾讯云(DNSPod)为例,因为其解析面板免费且操作简单。
- 浏览器打开:
https://cloud.tencent.com - 点右上角【注册】/【登录】,支持微信扫码或手机号注册。
- 首次使用建议顺手完成账号实名(个人即可),后面买域名、做域名实名认证都要用。
- 登录后,在顶部搜索框输入:域名注册
- 点击搜索结果进入【域名注册】产品页(也可直接在浏览器输入
https://dnspod.cloud.tencent.com进入 DNS 控制台,在左侧找"域名注册")。
- 在搜索框输入你想要的名称(如
myname),下方勾选想买的后缀。 - 后缀说明:
.com:最主流,约 60~80 元/年.cn:国内常用,需实名.cloud、.top、.xyz等新后缀:便宜(有的几元~几十元/年),适合个人
- 点【查询】,查看结果:
- ✅ 可注册:显示价格,可加入购物车
- ❌ 已被注册:换名称或换后缀再搜
- 选中心仪域名 → 点【加入购物车】。
- 在购物车选择购买时长(建议先买 1 年,后续可续费)。
- 点【去结算】。
下单页需要填写域名所有者信息(用于 WHOIS 登记):
- 所有者类型:个人
- 姓名、联系电话、邮箱:如实填写
- 建议顺便勾选"开启隐私保护"(如服务商提供),避免个人信息公开
支持微信 / 支付宝 / 银行卡等,支付后域名立即生效。
国内注册局规则:域名必须实名认证,未实名可能被暂停解析或锁定,网站打不开。
- 进入【控制台 → 域名注册 → 我的域名】,找到你的域名。
- 点击域名,或右侧【更多操作 → 实名认证】。
- 按提示创建/使用信息模板:
- 个人:上传身份证正反面照片,填写姓名、身份证号
- 企业:上传营业执照
- 提交后等待审核:通常几分钟 ~ 1 个工作日,状态变为"正常 / 已实名"即可。
⚠️ 实名审核期间不影响域名解析配置,但建议尽早提交,防止网站上线后被关停解析。
- 腾讯云购买的域名默认使用 DNSPod(腾讯云解析),无需额外开通。
- 验证方法:控制台 → 域名注册 → 我的域名,域名列表里"解析"状态显示正常即可。
- 下一步所有"添加解析记录"的操作,都在 DNSPod 解析控制台 完成。
| 需求 | 选择 |
|---|---|
| 纯静态网页(HTML/CSS/JS) | GitHub Pages(免费) ✅ |
| 需要 PHP、数据库、后端程序 | 云服务器 + Nginx(付费) |
- GitHub Pages 优点:免费、自带 HTTPS 且自动续期、不用管服务器。
- 缺点:只支持静态文件,不支持后端代码。
- 本教程走 GitHub Pages 方案;服务器方案要点见附录 B。
- 打开:
https://github.com - 点【Sign up】(注册):
- Username(用户名):全网唯一,记牢,后面仓库名和 CNAME 都要用它
- Email:你的邮箱
- Password:设置密码
- 按提示完成验证码与邮箱验证(GitHub 会给注册邮箱发验证邮件,点邮件里的链接确认)。
- 注册完成后登录 GitHub。
💡 用户名建议:全小写字母 + 数字(如
myname123),避免大小写混淆。
- 登录 GitHub 后,点击页面左上角绿色按钮【New】(新建仓库)。
- 填写仓库信息。
- Repository name 必须一字不差填:
<你的GitHub用户名>.github.io - 示例:用户名是
myname123,仓库名就是myname123.github.io - 这是个人站点专用命名,写错就无法正常启用 Pages。
- 按当前 GitHub 账户套餐与仓库策略选择可见性,不要把"必须公开"当作所有方案的通用要求:免费个人账号只能从公开仓库发布 Pages;Pro / Team / Enterprise 付费套餐也支持从私有仓库发布(私有仓库 Pages 属付费功能)。
- 本教程以 Public(公开仓库)为准。若选择私有仓库,请确认 Pages 发布权限,并注意站点本身默认仍可被公开访问——不要在仓库中提交 API 密钥、密码或其他不应公开的内容。
- 点底部绿色【Create repository】。
- 创建成功后,浏览器地址栏显示:
github.com/<用户名>/<用户名>.github.io
目的:向 GitHub 证明"这个域名确实归你所有"。注意区分两个不同层面的操作:**账号级域名验证(Verified domains)**验证域名所有权,一次验证对账号下所有仓库生效,可降低他人把你的域名绑定到其 Pages 站点的风险;**仓库级自定义域名(Custom domain)**则是把域名绑定到本仓库的站点,是让站点通过该域名访问的必要设置。二者目的与生效范围不同,不能互相替代;未做账号级验证时,仓库绑定过程中按页面提示补 TXT 记录即可。
- 点击右上角头像 → 【Settings】→ 左侧菜单找 Pages。
- 找到 Custom domains(Verified domains) 区域,点 Add a domain。
- 输入你的域名(如
example.com),点 Add domain。 - GitHub 会生成两条验证信息(先记下来):
- 主机记录:形如
_github-pages-challenge-<你的GitHub用户名> - 记录值:一长串随机文本
- 主机记录:形如
完成账号级验证后,仍需单独进入仓库【Settings】→【Pages】→ Custom domain 填入域名并保存,TXT 验证不会代替这一步。
- 进入你的仓库 → 【Settings】→ 【Pages】→ Custom domain 输入框填域名 → Save。
- 若域名尚未做过账号级验证,GitHub 会要求添加一条 TXT 验证记录,内容同上;验证通过后,域名即绑定到本仓库站点。
- 打开
https://dnspod.cloud.tencent.com,登录腾讯云账号。 - 在域名列表点击你的域名(如
example.com),进入记录管理页面。 - 点蓝色按钮【添加记录】,按下表填写:
| 字段 | 填写内容 |
|---|---|
| 主机记录 | _github-pages-challenge-<你的GitHub用户名>(不要加域名后缀) |
| 记录类型 | TXT |
| 线路类型 | 默认 |
| 记录值 | 完整复制 GitHub 给的那一长串随机文本,不删减、不换行 |
| TTL | 600(10 分钟,默认即可) |
- 点【确认】保存。
- DNS 生效一般 5~15 分钟,个别网络最长 1 小时。
- 生效期间不要反复修改记录。
- 回到 GitHub 的域名验证页面,点验证按钮。
- 状态变为 Verified / DNS check successful 即通过。
✅ 常见状态解读:
DNS Check in Progress:正在检测,等待DNS check successful:验证成功DNS check failed:TXT 记录填错或未生效,回 DNSPod 核对(注意主机记录不能带域名后缀、记录值不能复制错)- 验证成功 ≠ 网站可访问,必须继续第 6 章配置 A/CNAME 解析。
目标:访问
example.com时,DNS 把你的请求转到 GitHub Pages 服务器。
DNSPod 控制台 → 点你的域名 → 【记录管理】页面(就是刚才加 TXT 的地方),点【添加记录】。
GitHub Pages 官方提供 4 个固定 IP:
185.199.108.153 / 185.199.109.153 / 185.199.110.153 / 185.199.111.153
⚠️ DNSPod 免费版限制:同一主机记录(如@)最多添加 2 条 A 记录(负载均衡上限)。加第 3、4 条会报"子域名负载均衡数量超出套餐限制"。任选其中 2 个 IP 即可正常访问,不用 4 条。
逐条添加以下两条:
记录 1
| 字段 | 填写内容 |
|---|---|
| 主机记录 | @(代表主域名本身) |
| 记录类型 | A |
| 记录值 | 185.199.108.153 |
| TTL | 600 |
记录 2
| 字段 | 填写内容 |
|---|---|
| 主机记录 | @ |
| 记录类型 | A |
| 记录值 | 185.199.109.153 |
| TTL | 600 |
| 字段 | 填写内容 |
|---|---|
| 主机记录 | www |
| 记录类型 | CNAME |
| 记录值 | <你的GitHub用户名>.github.io. |
| TTL | 600 |
⚠️ 记录值末尾必须带英文小数点.(如myname123.github.io.),漏掉会导致解析失效!
| 类型 | 主机记录 | 记录值 | 用途 |
|---|---|---|---|
| TXT | _github-pages-challenge-... |
长串随机文本 | 域名所有权验证(保留不动) |
| TXT | _dnsauth... |
长串随机文本 | 域名所有权验证(保留不动) |
| A | @ |
185.199.108.153 |
主域名解析 |
| A | @ |
185.199.109.153 |
主域名解析 |
| CNAME | www |
<用户名>.github.io. |
www 子域名解析 |
- 原 TXT 验证记录不要删除。
- 此时面板一共 5 条记录(2 TXT + 2 A + 1 CNAME),不会超免费版限制。
- 新增记录生效:一般 10~30 分钟,最长 24 小时(与网络运营商缓存有关)。
- 生效期间打开网页报
ERR_EMPTY_RESPONSE/ 无法访问,都是正常现象,不是配错了,等生效即可。
仓库根目录必须有
index.html,否则即使解析通了也会 404。
浏览器打开:https://github.com/<你的GitHub用户名>/<你的GitHub用户名>.github.io
- 点【Add file】→【Create new file】。
- 文件名填写:
index.html(必须全小写,Index.html、INDEX.HTML都不行)。 - 必须放在仓库根目录(不要创建文件夹再放进去)。
基础版(够用):
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>example.com</title>
</head>
<body>
<h1>🎉 GitHub Pages 部署成功!</h1>
<p>域名:example.com</p>
</body>
</html>进阶版(好看一点):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>example.com</title>
<style>
body { font-family: system-ui, sans-serif; display: flex; align-items: center; justify-content: center; min-height: 100vh; margin: 0; background: #f5f7fa; }
.card { background: #fff; padding: 48px 64px; border-radius: 16px; box-shadow: 0 4px 24px rgba(0,0,0,.08); text-align: center; }
h1 { color: #24292f; margin-bottom: 8px; }
p { color: #57606a; }
</style>
</head>
<body>
<div class="card">
<h1>🎉 部署成功!</h1>
<p>example.com 已接入 GitHub Pages</p>
</div>
</body>
</html>- 滚动到页面最底部(或点右上角【Commit changes】)。
- 提交信息保持默认即可,点绿色【Commit new file】保存。
- 仓库顶部点【Actions】,查看 Pages 构建工作流。
- 绿色 ✅ 成功:部署完成;红色 ❌:点进去看报错。
- 第一次提交后,Pages 构建约需 2~5 分钟,期间访问 404 是正常的。
- 进入仓库 → 点顶部【Settings】→ 左侧或页面中找 Pages。
- 在 Custom domain 输入框填入你的域名(如
example.com),点【Save】。 - 页面出现提示 DNS Check in Progress:GitHub 正在后台检测你的 DNS 解析。
⚠️ 此时不要反复点 Save,每次保存都会重新触发校验,拉长等待。
- 检测通过后,Enforce HTTPS(强制 HTTPS)复选框从灰色变为可勾选。
- 勾选 Enforce HTTPS。GitHub 会自动为域名申请 Let's Encrypt 免费证书并自动续期。
状态解读:
DNS Check in Progress:等待,属正常DNS check successful:校验通过,继续等证书DNS check failed:A/CNAME 记录有问题,回第 6 章核对(常见:CNAME 末尾缺.、A 记录 IP 填错)Enforce HTTPS灰色:证书未签发,等待即可;成功后自动解锁
⚠️ 关于 SSL 证书的常见误区:
- 不需要自己在服务商申请证书!GitHub 自动完成。
- 之前在腾讯云申请/下载的免费 SSL 证书,此方案完全用不上,可放着不用。
- 证书签发一般几分钟 ~ 几十分钟;即使未签发,
http://也可能已能访问,只是浏览器提示"不安全"。
- 用浏览器无痕/隐私窗口访问(避免本地缓存干扰):
https://example.comhttps://www.example.com
nslookup example.com- 正常结果:返回
185.199.108.x或185.199.109.x等 GitHub IP。 - 返回其他 IP 或超时:DNS 缓存未更新,继续等待或清缓存(CMD:
ipconfig /flushdns)。
- 域名实名认证已通过
- 仓库名是
<用户名>.github.io - 仓库根目录有
index.html(全小写) - DNSPod 有 2 条 A + 1 条 CNAME(+2 条 TXT 保留)
- Custom domain 已绑定,DNS check successful
- Enforce HTTPS 已勾选
- Actions 部署工作流绿色成功
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
ERR_EMPTY_RESPONSE / 无法访问 |
只做了 TXT 验证、没加 A/CNAME 解析;或 DNS 未生效 | 补全第 6 章 3 条解析记录,等待 10~30 分钟 |
| 404 页面 | 仓库没有 index.html;文件放进了子文件夹;文件名大小写不对 | 在仓库根目录建 index.html(全小写) |
| 404 持续 | Pages 首次构建未完成 | 进【Actions】看部署,等绿色成功(2~5 分钟) |
| 404 且 Actions 成功 | 分支/目录配置不对 | Pages 来源选 Deploy from a branch,分支 main,目录 /(root) |
| Enforce HTTPS 灰色不可勾选 | DNS 校验或证书签发未完成 | 等待,勿反复保存;通过后自动解锁 |
| CNAME 解析失效 | 记录值末尾漏了小数点 . |
补上末尾 . |
| 添加 4 条 A 记录报错"负载均衡超出限制" | DNSPod 免费版同主机记录最多 2 条 A | 只保留 2 条 A 记录即可 |
| DNS check failed | TXT 或 A/CNAME 记录填错 | 核对主机记录不带域名后缀、记录值完整、CNAME 末尾带 . |
| 访问提示"不安全" | 证书尚未签发完成 | 等待;勾选 Enforce HTTPS 后自动签发 |
| 国内访问慢/打不开 | 网络问题或 DNS 缓存 | 换网络测试、清 DNS 缓存(CMD:ipconfig /flushdns) |
-
GitHub Pages 需要自己在服务商买证书吗? 不需要。GitHub 自动签发 Let's Encrypt 免费证书并自动续期,零成本零维护。
-
买域名送证书吗? 腾讯云等平台提供免费的 DV 证书(如 90 天期、需手动续期),但只适用于服务器方案。GitHub Pages 方案用不到。
-
域名实名认证没做会怎样? 国内规则:未实名可能被暂停解析、域名被锁定,网站打不开。务必尽早完成。
-
免费域名能绑 GitHub Pages 吗? 可以,只要你能控制该域名的 DNS 解析(能添加 TXT/A/CNAME 记录即可)。
-
以后想换绑定怎么办? 仓库 Settings → Pages → Custom domain 改为新域名即可;旧解析记录在 DNSPod 删除。
若以后网站需要动态功能(PHP、数据库),改用云服务器方案:
- 购买轻量应用服务器(推荐香港地域,免备案),记下公网 IP。
- SSH 登录服务器:
systemctl status nginx # 检查 Nginx 是否安装/运行 apt update && apt install nginx -y # 未安装则安装 systemctl start nginx && systemctl enable nginx
- 校验配置:
nginx -t(输出test is successful才正常)。 - 控制台防火墙放行 80 / 443 端口(来源
0.0.0.0/0)。 - 网站根目录放
index.html测试页。 - 域名解析:
@和www各加一条 A 记录,指向服务器公网 IP(此时 DNSPod 免费版 2 条 A 也够用)。 - 在服务器配置 HTTPS(上传服务商签发的证书 + 配置 Nginx 443 站点)。
- 域名续费:到期前在服务商续费,避免域名过期被回收。
- 域名实名:保持已完成状态,续费不影响。
- 修改网站:直接改仓库里的文件并 Commit,GitHub 自动重新构建发布。
- 证书:GitHub 自动续期,无需任何操作。
- 解析:不要随意删除那 2 条 TXT 验证记录(删了可能触发重新验证)。
本教程已去除域名、GitHub 用户名等全部个人敏感信息,通用步骤可直接复用。 #(注:内容由AI生成)