跳至正文

GitHub访问慢?试试这个Cloudflare Workers反代方案

前几天帮客户调试服务器,需要从GitHub拉代码,结果SSH连接死活不通,HTTPS clone倒是能连上但是速度跟蜗牛似的,1MB的东西要跑2分钟。

换了几个镜像站,要么需要备案,要么速度也不稳定。后来想起之前给TMDB做反代的时候用过Cloudflare Workers,这玩意儿对GitHub应该也管用。

实测下来,Workers反代的延迟比直连GitHub稳定多了,而且完全免费

赛博朋克服务器机房

原理很简单

Cloudflare的边缘节点遍布全球,我们用Workers在CF服务器上做一个”中转站”:

你的机器 → Cloudflare边缘节点 → GitHub

CF节点到GitHub的连接质量,比你家宽带直连好得多。

部署步骤

1. 登录Cloudflare Dashboard

有账号的直接进,没账号的注册一个,不需要信用卡。

进入 Workers & Pages → 创建 Worker → 起个名字,比如 github-proxy

2. 粘贴代码

把默认的代码删掉,替换成这个:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request));
});

async function handleRequest(request) {
  const url = new URL(request.url);
  const githubUrl = new URL(url.pathname + url.search, 'https://github.com');
  const response = await fetch(githubUrl, {
    headers: {
      'User-Agent': request.headers.get('User-Agent') || 'Mozilla/5.0',
      'Accept': request.headers.get('Accept') || 'text/html',
    }
  });
  return new Response(response.body, {
    status: response.status,
    headers: response.headers
  });
}

保存并部署。

Cloudflare网络可视化

3. 配置自定义域名(可选但推荐)

免费的 Workers 有个问题:每天有10万请求限制,而且域名是 *.workers.dev

如果你有自己域名(比如 gh.yourdomain.com),可以在 Workers → 设置 → 触发器 → 自定义域,绑定你自己的域名。

这样访问 https://gh.yourdomain.com/用户名/仓库 就等于访问 GitHub。

4. 改hosts(可选,进一步优化)

有些情况下 DNS 污染会影响连接,可以在本地加一条 hosts:

# 查你CF Worker的IP
ping gh.yourdomain.com

# 编辑 hosts(macOS/Linux)
sudo vim /etc/hosts

# 添加一行
你查到的IP gh.yourdomain.com

实际效果

部署完之后测了一下:

  • 直连 GitHub:SSH 超时,HTTPS clone 30KB/s
  • Workers 反代:SSH 正常,HTTPS clone 2-3MB/s

不过要注意,不要用反代来push代码,push 操作可能会触发 GitHub 的安全机制。日常拉代码、clone仓库完全没问题。

进阶:SSH 走反代

如果你需要 SSH 克隆仓库,可以在 ~/.ssh/config 加上:

Host github.com
    Hostname gh.yourdomain.com
    ProxyCommand nc -X 5 -x 127.0.0.1:7890 %h %p

其中 127.0.0.1:7890 是你的本地代理端口,根据实际情况改。

嫌麻烦的话,直接用 HTTPS + token 的方式克隆更省事:

git clone https://gh.yourdomain.com/用户名/仓库.git
代理通道概念图

总结

Cloudflare Workers 反代 GitHub 是个零成本、零配置的解决方案,适合:

  • 开发环境需要频繁拉 GitHub 代码
  • 临时调试海外开源项目
  • 网络不稳定的场景

唯一要注意的就是别拿来 push 代码,老老实实用 HTTPS 或者 GitHub 官方 SSH。

如果你有更好的方案,欢迎交流。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注