GitHub Pages site with Free SSL/TLS
背景
Github Pages site 支持Custom Domain 的能力.
Custom domains allow you to serve your site from a domain other than USERNAME.github.io.
但是,默认情况下,GitHub Pages site使用的是HTTP协议,这意味着如果您使用了自定义域名,那么您的网站将无法通过HTTPS访问。 而HTTPS证书都是收费的,所以如果您需要使用HTTPS,那么您需要购买一个证书。
行业内cloudflare提供了免费的SSL/TLS 证书方案, 可以免费使用.
而当前的域名是在GoDaddy 购买的, 所以现在需要将三者绑定在一起来用, 解决 Custom Domain + HTTPS 的问题.
GoDaddy 的Namespace 切换到 Cloudflare提供的Nameservers
已知Cloudflare提供免费的SSL/TLS 证书, 切换到Cloudflare提供的Nameservers可以满足此功能.
当您将域名的Nameservers(名称服务器)从GoDaddy切换到Cloudflare提供的Nameservers时,在网络拓扑上会发生以下变化:
在GoDaddy使用GoDaddy Nameservers的情况:
- DNS解析权威性:当其他服务器或客户端试图找到您的域名对应的IP地址时,它们会查询GoDaddy的Nameservers来获取这些信息。GoDaddy的Nameservers是您域名DNS记录的权威来源。
- DNS管理:您在GoDaddy的控制面板中进行所有DNS管理操作,如添加或修改A记录、CNAME记录、MX记录等。
- 流量路由:用户访问您的网站时,他们的请求直接路由到您在DNS记录中指定的服务器IP地址。
切换到Cloudflare提供的Nameservers之后:
- DNS解析权威性:Cloudflare的Nameservers成为您域名DNS记录的权威来源。这意味着,当其他服务器或客户端查找您的域名时,现在他们会向Cloudflare发起查询。
- DNS管理:您现在在Cloudflare的控制面板中管理您的DNS记录。这包括修改或添加新的DNS记录、设置页面规则、配置SSL/TLS、管理缓存等。
- 流量路由和安全性:用户访问您的网站时,他们的请求会通过Cloudflare的全球网络。Cloudflare充当您的网站和访问者之间的代理,提供额外的安全性(如DDoS保护、Web应用防火墙)和性能优化(如内容分发网络CDN、智能路由)。
- 缓存和内容分发:Cloudflare的CDN将缓存您网站的静态资源,靠近用户的边缘节点会提供这些资源。这可以减少延迟,加快内容加载速度。
- 额外的功能:Cloudflare提供了许多额外的功能,如SSL证书自动化、网络分析、自定义页面规则、流量控制等,您可以在Cloudflare的控制面板中进行配置。
找到 Cloudflare 的Nameservers
- 创建域名
- DNS Records
- 找到 Cloudflare Nameservers
- 复制保存
Nameservers 切换
将GoDaddy 的Nameservers 切换到 Cloudflare提供的 Nameservers
- 登录GoDaddy
- 进入域名管理
- 点击 “DNS”
- 点击 “Nameservers” -> “Change Nameservers”
- 选择”User my own nameservers”, 并将从Cloudflare获取的Nameservers 填入
- 点击 “Save”
到此完成了域名的Nameservers 切换, 可以关闭了GoDaddy了.
在GitHub Pages设置自定义域名
- 打开您的GitHub仓库,进入到“Settings”。
- 在侧边栏中选择“Pages”。
- 在“Custom domain”部分,输入您的GoDaddy域名,例如example.com。
- 如果需要,勾选“Enforce HTTPS”来强制使用HTTPS连接。
- 保存这些设置。
- GitHub将会提供一个文件CNAME,或者您需要在仓库根目录或docs/目录中手动添加一个带有域名的CNAME文件。
Cloudflare 添加自定义域名
在Cloudflare上为GitHub Pages配置自定义域名时,正确设置DNS记录是确保HTTPS证书正确生成的关键步骤。按照GitHub的官方文档,这里是应该如何填写CNAME以及ALIAS或ANAME记录的指南:
Github的文档 Configuring an apex domain
对于Apex域(裸域,如example.com):
- A记录: 类型: A 名称: @ (或者您的裸域名example.com,@代表裸域) 值: GitHub Pages的IP地址列表
AAAA记录: 类型: AAAA 名称: @ (或者您的裸域名example.com) 值: GitHub Pages的IPv6地址列表
- ALIAS或ANAME记录 (如果您的DNS提供商支持): 类型: ALIAS 或 ANAME 名称: @ (或者您的裸域名example.com) 值: USERNAME.github.io 或 ORGANIZATION.github.io (替换成您的GitHub用户名或组织名)
对于子域(如www.example.com,blog.example.com):
- CNAME记录: 类型: CNAME 名称: SUBDOMAIN (例如www或blog) 值: USERNAME.github.io 或 ORGANIZATION.github.io (替换成您的GitHub用户名或组织名)
这是一个可选, 如果用的裸域名example.com, 这里不需要填写, A/AAA默认用的顶级域名example.com
- CNAME记录: 类型: CNAME 名称: SUBDOMAIN (例如www或blog) 值: USERNAME.github.io 或 ORGANIZATION.github.io (替换成您的GitHub用户名或组织名)
Cloudflare上设置DNS记录的方法如下:
- 登录到您的Cloudflare账户。
- 选择相关的域名。
- 点击“DNS”选项卡。
- 根据需要的类型(A,AAAA,CNAME,ALIAS或ANAME),点击“添加记录”按钮。
- 填写相应的“类型”,“名称”和“值”字段。
- 保存记录。
注意:Cloudflare不支持传统的ALIAS或ANAME记录类型。但是,Cloudflare提供了一个功能类似的记录叫做“CNAME Flattening”,它可以在根域名上工作,就像ALIAS或ANAME记录一样。如果您设置根域名的CNAME记录,Cloudflare会自动应用CNAME Flattening。
触发GitHub的HTTPS证书生成
- 如果您刚刚添加或修改了自定义域名,您可能需要在GitHub仓库的Pages设置中移除并重新添加您的自定义域名来触发GitHub的SSL证书生成过程。
- 转到GitHub仓库的“Settings”。
- 在“Pages”部分,移除当前的自定义域名,然后重新添加它,并保存。
测试
使用Cloudflare提供的Speed下的Observatory 可以做定期网站测试功能. 将Frequency 设置为每周即可.