NiceLeeのBlog 用爱发电 bilibili~

备忘录 通过fastly镜像整个Github Pages

2024-08-18
nIceLee

阅读:


现存的Github Page设置CNAME域名为A,但是访问速度有时候不如人意。
现在的目标是,在域名B上提供和A相同的服务,在A连接不上时多一个选择。

前言

Cloudflare时不时抽风阻断,Gcore没几个ip能用,Fastly不支持Websocket,可以白嫖的CDN已经不多了。

现在举个例子,Github Pages地址为nicennnnnnnlee.github.io,CNAME域名A为nicelee.top,在fastly使用域名B为fastly.nicelee.top
需要注意的配置有:

  • 填写镜像github.io地址
  • Enable TLS,并指定443端口
  • 设置请求的SNI,这里指的是CNAME的A域名
  • 验证服务器给的证书的域名,填写github.io地址
  • 设置覆盖的Host地址,所有的HTTP请求转到Github服务器时都会从B变为A

重定向问题

https://fastly.nicelee.tophttps://fastly.nicelee.top/[Github项目名]这种地址,Github会在后面加一个/作为301重定向的location。
我们不想看到的是,它的location不是//[Github项目名]/这种,而是带上了域名A,变成了 https://nicelee.top/https://nicelee.top/[Github项目名]/。这样,访问域名B还是会在不经意间跳转到A

解决方案是:
通过fastly特有的vcl脚本,在DELIVER阶段将Location地址的host替换掉

if (resp.status == 301) {
  set resp.http.Location = std.replace_prefix(resp.http.Location, "https://nicelee.top", "https://" req.http.host);
  return (deliver);
}

内容
隐藏