壹贰线报核实:GitHub Pages 免费静态托管全拆解,1GB 存储 + 每月 100GB 带宽怎么用不踩坑

各位站长、开发者,今天给大家带来一期逐项核对过 GitHub 官方文档的 Pages 线报。

GitHub Pages 是所有免费静态托管里最"老资格"的一个——不用买服务器、不用配 Nginx,代码 push 到仓库,几分钟后网站就上线了。它和 Git 工作流深度绑定,写博客、做文档站、放作品集几乎是"零心智成本"。

但正因为用的人多,关于它的传言也特别多。有人以为"1GB 存储 + 100GB 带宽"是硬性额度用完就停,有人为了给自定义域名配 HTTPS 专门去折腾 Cloudflare 和证书,还有人辛辛苦苦搭好站点,却发现国内同事根本打不开。

‌这几个问题的答案,官方文档其实都写了,只是很多人没翻到原文。‌ 下面我把核实后的完整情况、真实边界和实操流程一次性讲清楚。

先把两个最常见的误解纠正掉

‌误解一:额度是硬限制,用完就断。‌

不是。GitHub 官方文档对 Pages 的用量限制是这么表述的:

  • ‌存储‌:源仓库建议不超过 1GB,‌发布出来的站点不能超过 1GB‌(这条是硬的)

  • ‌带宽‌:每月 ‌100GB‌,但官方明确定义为 ‌soft limit(软限制)‌

  • ‌构建‌:每小时 ‌10 次‌,同样是软限制——但‌如果你用自定义的 GitHub Actions 工作流来构建发布,这条限制不适用‌

  • ‌部署超时‌:单次部署超过 ‌10 分钟‌会失败

也就是说,正常使用的个人博客、文档站,几乎不可能碰到带宽上限;真正会卡住你的是‌仓库体积‌和‌构建时长‌这两项硬约束。官方还补了一句:为了保障所有站点的服务质量,可能会触发限流,如果被限流会返回 HTTP 429 状态码。

‌误解二:自定义域名的 HTTPS 要自己搞 Cloudflare 或 Let's Encrypt 证书。‌

不用。GitHub 官方文档写得很清楚:‌所有 GitHub Pages 站点——包括正确配置了自定义域名的站点——都支持 HTTPS,而且可以在仓库设置里一键开启"Enforce HTTPS"强制跳转‌。证书由 Let's Encrypt 自动签发、自动续期,全程不需要你手动操作。

2016 年 6 月 15 日之后创建的、使用 github.io 域名的站点,本身就是自动走 HTTPS 的。

所以正确理解是:‌HTTPS 是 Pages 自带的,Cloudflare 的角色是"可选的加速层",不是"证书来源"‌。至于什么时候才需要 Cloudflare,后面单开一节说。

这些免费权益到底给了你什么

  • ‌公共仓库免费托管静态站点(永久免费)‌
    只要你的账号是 GitHub Free,就能用‌公共仓库‌发布 Pages 站点;如果要用‌私有仓库‌发布(站点不公开),则需要 GitHub Pro、Team 或 Enterprise 账号。这一点常被忽略:免费版想用 Pages,仓库必须是公开的。

  • ‌1GB 存储上限‌
    源仓库建议控制在 1GB 以内,发布出来的站点也不能超过 1GB。这个量级对纯文本为主的博客、文档站非常宽裕,但如果你的站点要塞高清图片、视频素材,很快会顶到上限——‌联系方式是把大文件放到对象存储或图床,仓库里只留链接‌。

  • ‌每月 100GB 软带宽‌
    按软限制理解:正常个人站点用它跑几年都不会有问题。但如果你打算做资源分发、跑高流量下载,这套免费额度就不合适了,官方也明确说过不要把它当高流量站点的承载方案。

  • ‌自定义域名 + 自动 HTTPS(免费)‌
    支持绑定自有域名,支持强制 HTTPS,证书自动签发续期。有两个技术细节要记住:一是‌整个域名的长度必须小于 64 个字符‌(RFC3280 规定的通用名长度上限),否则证书签发会失败;二是‌不要使用通配符 DNS 记录‌(如 *.example.com),官方明确警告这会带来域名被接管的立即风险。

  • ‌与 Jekyll 无缝集成,也可换成任意生成器‌
    Pages 默认内置 Jekyll,能直接处理 Markdown 和 Liquid 模板,仓库里提交 .md 文件就能生成页面。如果你用的是 Hugo、VuePress、Hexo 这类别的生成器,可以写一条 GitHub Actions 工作流来构建,自由度更高——顺带说一句,走 Actions 发布还能顺便绕开"每小时 10 次构建"这条限制。

  • ‌自动部署与域名所有权验证‌
    代码 push 到指定分支后,站点会自动重新发布,通常几分钟内生效(最长约 10 分钟)。配置自定义域名前建议先做域名所有权验证,这是防止域名接管攻击的关键一步。

实测踩坑:国内用户必须先知道的一件事

前面讲的都是"能力",但有一件事对国内读者优先级最高,必须单独说清楚:

‌<用户名>.github.io 这类默认域名在国内直连的访问体验不稳定。‌ GitHub 的页面服务由海外 CDN 承载,国内访问经常遇到解析慢、加载卡、偶发连接失败。这不是你的配置问题,是网络链路问题。

所以对面向国内读者的站点,有三条现实路径:

  1. ‌绑自定义域名 + 套国内 CDN‌:把源站设在 Pages,国内走备案好的 CDN 回源。速度能提上来,代价是要处理备案和 CDN 配置(和 OSS 托管那套思路类似)。

  2. ‌套 Cloudflare 做加速‌:适合主要面向海外或不确定受众的站点。‌这里有个高频翻车点‌:Cloudflare 的 SSL/TLS 加密模式一定要选"完全(严格)",不要用"灵活"模式——否则 Pages 已强制 HTTPS、Cloudflare 又用 HTTP 回源,会出现无限重定向循环或 525/526 错误。

  3. ‌改用国内托管方案‌:如果你的读者几乎都在国内,坦率说,Serveless 平台的静态托管(如前面线报里提过的 EdgeOne Pages)在速度和备案生态上更省心,Pages 更适合作为海外项目或技术博客的选择。

此外还有几条实操边界,建议提前记牢:

  1. ‌仅支持静态内容‌,不能跑 PHP、Python、Node 之类的服务端逻辑;GitHub Pages 站点也不要用于密码、信用卡这类敏感信息的传输。

  2. ‌不适合商业用途‌。官方服务条款明确写了:不得把这套免费托管当作运行在线业务、电商站点或 SaaS 服务的免费主机。

  3. ‌DNS 更改最长要等 24 小时生效‌,别配完就急着判定失败。

  4. ‌先绑域名、再改 DNS‌。官方特别提醒:‌一定要先把自定义域名添加到 Pages 设置里,再去 DNS 服务商配置解析‌;顺序反了,别人可能趁机在你的子域名上挂站点。

  5. ‌从分支发布和从 Actions 发布的域名文件机制不同‌。从分支发布时,填写自定义域名会自动生成 CNAME 文件;走自定义 Actions 工作流发布时,不会创建 CNAME 文件,已有的 CNAME 文件也会被忽略。用 Actions 部署的朋友按新机制配置,别照着老教程找 CNAME。

实操:从零到上线的完整流程

‌第一步:创建仓库并放好站点文件‌
建一个公共仓库,把站点文件放进去。用户站点(用户名.github.io)和项目站点(用户名.github.io/仓库名)的仓库命名规则不同,按官方说明来。

‌第二步:配置发布源‌
进入仓库 ‌Settings → Pages‌,在"Build and deployment"里选择发布源:可以用某个分支(如 main 的 /root 或 /docs 目录),也可以选 GitHub Actions 工作流。如果只是纯静态页面,走分支最省事;如果用别的生成器构建,就配 Actions。

‌第三步:等站点上线‌
提交推送后,页面通常会提示访问地址。首次发布可能要等几分钟,超过 10 分钟会超时失败。

‌第四步:绑定自定义域名(可选)‌
在 Pages 设置里的 ‌Custom domain‌ 输入你的域名并保存。‌注意顺序:先在 GitHub 完成这一步,再去 DNS 服务商配置。‌

‌第五步:配置 DNS 解析‌

  • ‌顶点域名(如 example.com)‌:添加 A 记录,指向 GitHub 的四个 IP:185.199.108.153、185.199.109.153、185.199.110.153、185.199.111.153;需要 IPv6 可另加 AAAA 记录;如果 DNS 服务商支持 ALIAS / ANAME 记录,优先用它们指向站点默认域名,更灵活。

  • ‌子域名(如 www.example.com)‌:添加 CNAME 记录指向 用户名.github.io。

配完用 dig 命令核对一下解析是否正确。DNS 变更最长 24 小时生效。

‌第六步:开启强制 HTTPS‌
域名生效后,回到 Pages 设置勾选 ‌Enforce HTTPS‌,GitHub 会自动签发证书并把所有 HTTP 请求跳转过去。证书通常是几分钟内签发完成,自动续期,不用管。

‌第七步(可选):验证域名所有权‌
在账号设置里给自定义域名加一条 _github-pages-challenge-… 的 TXT 记录完成验证,能有效防止域名被他人接管。

壹贰线报专属:两套零成本方案

‌技术博客 / 文档站方案(最省心)‌
公共仓库 + Jekyll(或 Hugo / VuePress 走 Actions 构建),代码 push 即自动发布,自定义域名 + 自动 HTTPS 一次性搞定。仓库里只放文本和轻量图片,把高清素材甩到图床或对象存储,避免顶到 1GB 上限。面向海外和技术读者,这套方案成本和维护量都接近零。

‌面向国内读者的方案(要动点脑筋)‌
Pages 打底做源站,绑自定义域名,用国内 CDN 或 Cloudflare 做加速层,按前面说的把 SSL 模式和缓存规则配对。如果你不想折腾备案和 CDN,就直接评估换成国内静态托管平台,整体体验会更顺。

最后提示

壹贰线报只发核实过的信息。这次之所以先花篇幅纠正两个误解,是因为"额度用完即停""必须自己折腾证书"这类说法流传太广,容易把人劝退——而实际上,Pages 的额度逻辑和 HTTPS 支持方式,和很多人的印象正好相反。

上手前建议想清楚三件事:一是‌面向国内还是海外读者‌,这决定你要不要额外加加速层;二是‌站点体积‌,别让大文件顶穿 1GB 上限;三是‌用途是否商业‌,免费页面的服务条款是有明确限制的。

有在用 GitHub Pages 的朋友,欢迎在评论区说说你的构建方式(Jekyll 还是 Actions),以及绑自定义域名时踩过哪些坑,和其他站长一起交流经验。


版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。