使用CDN加速Github Pages踩坑之循环重定向
踩坑过程
用Github Pages部署发布个人博客虽然免费,但是它在国内的访问速度实在令人不敢恭维,于是想着用CDN加速下,看到腾讯云有100G免费流量,所以试用了下,结果一顿操作完博客访问不了了。
开始以为是DNS、CDN、浏览器缓存等问题,各种刷新、删除缓存操作弄完并没有什么用,一度怀疑Github Pages自己挂了,于是访问了下Github Pages自己的博客域名,结果发现域名重定向为我自定义的域名了,不禁产生怀疑:这岂不是循环了?
分析 & 解决
现状
为方便描述问题,先介绍下涉及的2个域名:
- 自定义的博客域名:www.ggsmida.com
- Github Pages原始的域名:gjw0317.github.io
由于是第一次使用CDN,配置CDN时就一直没弄明白里面的源站里为什么有2个地址:源站地址、回源HOST。许多网上资料都是建议配置成一样的,所以当前的源站配置里,我的源站地址和回源HOST都是配置的gjw0317.github.io,完整配置如下图:
Github Pages里配置的"Custom domain"是www.ggsmida.com,如下图:
分析
多年的工作经验告诉我们一个道理,哪里没弄清楚,问题往往就来自哪里。 所以查了下这两个概念的作用,如下:当CDN服务器要访问源站时,是根据源站地址去向源站发送请求的,而回源HOST是用于设置发送请求时所使用的HOST头部信息,可以简单理解为源站会根据HOST头部信息来获取这次请求要访问的目标地址。
那么循环重定向是怎么产生的呢?
这是由于一旦Github Pages里配置了"Custom domain"后,所有访问gjw0317.github.io的请求就都会被重定向到www.ggsmida.com,反过来则不会(除非你自己额外配置了这条DNS解析方向)。
所以当我们访问www.ggsmida.com时,会先经过DNS CNAME解析到CDN的域名,进而CDN服务器又会向源站发送请求,此时因为Github Pages服务器从请求头里拿到的你要访问的地址是gjw0317.github.io,所以它又把请求重定向到www.ggsmida.com,于是CDN服务器将这个重定向请求返回给了我们,之后我们又再次重复了前面的访问链路,从而整体产生了循环重定向。
经过上面的解释,你会发现问题就出在Github Pages认为我们要访问的是gjw0317.github.io,而不是www.ggsmida.com,导致产生了重定向。而这个就是由"回源HOST"这个配置项控制的。
解决方案
综上分析可以得出。解决办法就是,将"回源HOST"设置为自定义的博客域名:www.ggsmida.com。
附录
最后附上完整的配置,供大家参考,注意全链路都是www,如果你不用www的域名话,全链路也都不要用,保持一致。
DNS解析
自定义博客的域名境内 CNAME 到 CDN 的域名,境外 CNAME 到 Github Pages 的原始域名。
CDN 域名加速
创建CDN域名加速。
GitHub Pages 的 Custom domain
GitHub Pages上设置个人域名。