用 Cloudflare Worker 做 GitHub 加速
GitHub 本身能连,但 clone 只有几十 KB/s、raw 文件经常转圈、release 下载龟速。
网上现成的加速站不少,但要么随时跑路,要么不知道中间动了什么。
干脆自己写一个 —— 就是导航里的「GitHub 加速」,灵感来自开源项目
afoim/GithubSiteProxyForCloudflareWorker。
思路:域名映射,而不是路径代理
最常见的一类加速站是 proxy.com/https://github.com/... 这种路径式代理,
缺点很明显:任何页面里的相对链接、重定向、脚本资源都会错乱。
更彻底的做法是给每个 GitHub 域名配一个短前缀子域:
github.com → gh.susua.kdns.fr
raw.githubusercontent.com → raw.susua.kdns.fr
api.github.com → api.susua.kdns.fr
avatars.githubusercontent.com → avatars.susua.kdns.fr
Worker 按 prefix.domain 反查真实域名,替换 Host 后转发,路径原样保留。
这样 git clone https://gh.susua.kdns.fr/user/repo.git 和原始命令只差一个域名。
关键的三处细节
1. 响应文本里的链接要改写
直接把 GitHub 页面透传回去,页面里的 https://github.com/... 链接还是指向原站。
所以对 text/*、application/json 这类响应体做一次域名替换,
把 github.com 换成本站的 gh. 前缀,页面内的跳转才继续走代理。
(同时要删掉 content-encoding / content-length,因为内容长度变了。)
2. 大文件不要经 Worker 中转
Workers 有请求/响应大小与 CPU 时间限制,release 包动辄几百 MB。
解法是:命中 /releases/download/ 或 /archive/ 时直接
302 跳到一个专用加速站,让大流量绕开 Worker。
3. 非大陆出口自动回源
代理只在网络受限时有意义。读一下请求头里的 CF-IPCountry,
非 CN 的访客直接 302 回原始 GitHub —— 既省了 Worker 的额度,也避免「明明能直连还要多绕一跳」。
效果与代价
- 效果:clone / raw / api 都能用,速度取决于 Cloudflare 到访客的线路,通常比直连稳。
- 代价:免费套餐每天 10 万次请求,个人使用绰绰有余;文本改写会多一点 CPU,注意别滥用。
- 注意:
api.github.com走代理时,脚本里的api.github.com也要一起改掉, 否则 token 校验和分页链接会回到直连。
小结
核心就三件事:域名映射保证链接可用、响应改写保证跳转正确、大文件跳转保证不爆额度。 一个几百行的 Worker 就能长期自用,比依赖随时可能消失的公共加速站踏实得多。