
前言
前两天给网站接入 GitHub 授权登录的时候发现有一个问题,就是大陆服务器不能直接访问 GitHub 的 API。这个问题相信很多开发者都遇到过,毕竟 GitHub 的 API 在国内访问经常不稳定或者直接超时。
解决方案有几种:购买海外服务器搭建代理、使用 VPN、使用第三方代理服务等。考虑到成本和稳定性,我最终选择了使用 Cloudflare Workers 来搭建一个简单的 API 代理。
为什么选择 Cloudflare Workers
- 免费额度充足:每月有 10 万次免费请求,对于个人项目来说完全够用
- 全球 CDN 加速:Cloudflare 在全球有大量节点,可以提供快速的访问体验
- 部署简单:只需要写几行代码,通过 Dashboard 就能快速部署
- 无需服务器:不需要管理任何服务器,零运维成本
至于其他几种方案我为什么不使用呢?主要有以下几个问题
- 购买海外服务器搭建,成本太高,我更希望接近零成本的解决这个问题
- 使用 VPN 本质上还是属于翻墙行为,这是违法的,搭建代理就可以规避掉这个问题
- 使用第三方代理服务,稳定性与安全性肯定不如自己搭建的代理
实现
Cloudflare Workers 的代码非常简单,使用 JavaScript/TypeScript 编写。核心思路就是将请求转发到 GitHub API,然后将响应返回给客户端。
export default { async fetch(request, env, ctx) { // 处理 OPTIONS 预检请求 if (request.method === "OPTIONS") { return new Response(null, { headers: { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,POST,OPTIONS", "Access-Control-Allow-Headers": "Content-Type" } }); }
const reqUrl = new URL(request.url); let targetUrl;
// /login 路径代理到 github.com,其他路径代理到 api.github.com if (reqUrl.pathname.startsWith("/login")) { targetUrl = `https://github.com${reqUrl.pathname}${reqUrl.search}`; } else { targetUrl = `https://api.github.com${reqUrl.pathname}${reqUrl.search}`; }
// 转发请求 const forwardReq = new Request(targetUrl, { method: request.method, headers: request.headers, body: request.body });
const resp = await fetch(forwardReq); const newResp = new Response(resp.body, resp); newResp.headers.set("Access-Control-Allow-Origin", "*");
return newResp; }};部署步骤
-
注册 Cloudflare 账号:访问 Cloudflare 注册一个免费账号
-
创建 Worker:在 Dashboard 页面左侧的导航栏中展开 “计算”,点击 “Workers 和 Pages”,后点击右上角的 “创建应用程序”,开发方式选择从Hello world开始,起一个项目的名字,比如 “github-api-proxy”,随后点击部署
-
粘贴代码:来到这个项目的页面,点击右上角的编辑代码,将上面的代码粘贴到编辑器中
-
设置路由(可选):如果你有自己的域名,可以在 Workers & Pages -> 路由中设置自定义路由,我强烈推荐绑定一个自己的域名
-
部署:点击 “部署” 即可完成一个代理的搭建
部署完成后,你就有了一个自己的 GitHub API 代理,访问地址类似:https://your-worker.your-subdomain.workers.dev/
使用示例
之前直接调用 GitHub API 的地方:
https://api.github.com/user现在改为:
https://your-worker.your-subdomain.workers.dev/user注意事项
-
频率限制:GitHub API 有速率限制,使用代理后仍然是同一个 IP 去请求,所以要注意控制请求频率
-
HTTPS:Cloudflare Worker 自动提供 HTTPS,无需额外配置
-
安全性:我们提供的示例代码只能确保服务能正常运行,实际上部署时应该修改代码使得它具备一定的安全性,比如添加认证机制、限制请求频率等,这些都可以很轻松地通过代码修改实现
警告
使用 CF Workers 代理 GitHub 可能会违反使用规则导致你的账号被封禁,所以请做好安全措施,比如限制请求频率、添加认证机制等。大部分的封号行为都是因为请求频率过高或者是接口没有经过鉴权但是地址被泄露了导致被不法分子盗用,我们建议你只在测试环境里使用这套方案,生产环境请谨慎使用并做好安全验证。能自己搭建代理服务器最好就自己搭建,本文章仅供学习参考使用了我们的方案导致你的帐号被封禁或其他问题我们不负责任!!
分享文章
生成精美分享图或复制链接,与更多人分享本文。
继续阅读
换条路线
从其他文章中稳定抽取
最后更新于 ,距今已过 118 天
部分内容可能已过时