GitHub Pages 启用 Cloudflare 加速及 HTTPS

前几天转移域名的时候发现GitHub Pages没有全部开启HTTPS,而且Cloudflare设置的A记录也不全,就重新折腾了一遍,顺便记录一下

配置步骤

Cloudflare

Cloudflare的配置我很早之前就搞过了,再简单写一下,加点图片

  1. 登录 Cloudflare, 然后点击顶栏的Add site
  2. 输入自己的域名,然后点击Add site按钮,我这胡乱加了一个没人用的做示范
    cl1.png
  3. 选择方案,一般选Free就够用了
    cl2.png
  4. 然后Cloudflare会自动获取域名的DNS记录,这里跳过,拉到页面最底部,点击Continue按钮,待会回来再配置
    cl3.png
  5. 复制Cloudflare给出的域名服务器,回到域名注册商那里替换掉原有的
    cl4.png
    cl5.png
  6. 回到Cloudflare,点击Done, check nameservers
  7. 然后慢慢等待生效,生效后会有邮件提醒,等待生效的时候可以先设置SSL/TLS
    1. 在Overview里,将Encryption Mode先设置为Full
      ssl1.png
    2. 然后到Edge Certificates中,开启Always Use HTTPSOpportunistic Encryption
      ssl2.png
    3. 到Origin Server中,开启Authenticated Origin Pulls
      ssl3.png
  8. 生效后到DNS设置里添加四条A记录与一条CNAME记录
    1. CNAME记录的NAME设置为www,Content设置为GitHub Pages默认的域名,用户名.github.io那个
    2. A记录的Name都使用@或者自己的域名,Content依次设置为
      1. 185.199.108.153
      2. 185.199.109.153
      3. 185.199.110.153
      4. 185.199.111.153
  9. 确认一下各个记录的Proxy status都是Proxied状态,即橙色的云朵
    dns.png

GitHub Pages 配置

  1. 打开自己的网站的仓库设置Settings-Pages
  2. Custom domain中填入自己的域名,点击Save后会自动生成一个CNAME文件

开启Encryption Full (strict)模式

Full (strict)模式与Full模式的区别在于,Full (strict)模式使用的是由可信 CA 或 Cloudflare Origin CA 签名的有效证书并对每个请求验证证书,而非Full模式使用的无需验证的自签名证书。GitHub Pages可以通过开启Enforce HTTPS来获取免费的可信证书,满足开启Full (strict)模式的条件。下面就是我今天新发现的问题,我的Pages设置中不能开启Enforce HTTPS,勾选框一直是灰色的,折腾半天发现是Cloudflare的代理状态的造成的,解决方案如下

  1. 在Cloudflare的DNS设置中把Proxy status全部设置为DNS Only状态,即灰色的云朵
    https00.png
  2. 回到Pages设置,刷新一下就可以勾选Enforce HTTPS
  3. GitHub会自动申请SSL证书,有了这个证书才能够在Cloudflare开启Full (strict)模式
    https01.png
    https02.png
  4. 等待Pages的HTTPS生效后,回到Cloudflare,把刚才修改的Proxy status全部恢复为Proxied状态,即橙色的云朵
  5. SSL/TLS设置中,将Encryption Mode设置为Full (strict)
    https03.png

DNS记录类型科普

部分内容引用自 维基百科

A记录

A记录(Address record)是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的网页服务器(web server)上。同时也可以设置域名的子域名。它会传回一个32位元的IPv4地址。

AAAA记录

AAAA记录(AAAA record)是用来将域名解析到IPv6地址的DNS记录。用户可以将一个域名解析到IPv6地址上,也可以将子域名解析到IPv6地址上。它会传回一个128位元的IPv6地址。

CNAME记录

CNAME记录(Canonical Name Record),用于将一个域名(同名)映射到另一个域名(真实名称),域名解析服务器遇到CNAME记录会以映射到的目标重新开始查询。CNAME 记录可用于 CDN 加速,通过 CDN 加速别名解析网站域名。

NS记录

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。

MX记录

MX(mail exchanger)记录用于指定负责处理发往收件人域名的邮件服务器。

TXT记录

TXT记录一般指为某个主机名或域名设置的说明。

TTL

TTL(Time To Live)表示解析记录在DNS服务器中的缓存时间,长度为秒。当本地DNS服务器收到某一域名的解析请求时,需要向该域名指定的权威DNS服务器发送解析请求获取解析记录。获得的解析记录会在本地DNS服务器中保存一段时间。在这段时间内,如果本地DNS服务器再次收到该域名的解析请求,将不再向权威DNS服务器发送解析请求,而是直接返回保存在本地DNS服务器中的解析记录。