avatar

ShīnChvën ✨

Effective Accelerationism

Powered by Druid

使用 Cloudflare Worker 加速 GitHub CDN 访问

Tue Sep 26 2023

GitHub Cloudflare

GitHub是开发者社区中最大的代码托管平台之一,但在某些地区,由于网络限制和访问速度问题,访问 GitHub 的速度可能会受到影响。幸运的是,你可以使用 Cloudflare Worker 来改善 GitHub 的访问速度,尤其是针对其内容分发网络(CDN)上的文件。在本文中,我们将介绍如何设置一个 Cloudflare Worker 来缓解这些问题。

什么是 Cloudflare Worker?

Cloudflare Worker 是一个运行在全球分布式网络中的服务器端代码环境,它允许你在网络请求进入 Cloudflare 边缘节点时执行自定义代码。这意味着你可以在接近用户的地方运行代码,从而加速响应时间,减少网络延迟,并提供更好的用户体验。

使用 Cloudflare Worker 加速 GitHub CDN

在这里,我们将展示如何使用 Cloudflare Worker 来加速 GitHub CDN 的访问,特别是 GitHub 仓库中的发布文件和原始文件。我们将创建一个 Worker,使其能够代理 GitHub CDN 请求,并在必要时从 GitHub 获取文件。

步骤1:创建 Cloudflare Worker

首先,你需要一个 Cloudflare 帐户和一个域名。登录到 Cloudflare 控制台,然后选择你的域名。在 "Workers" 部分,创建一个新的 Worker,并将其绑定到你的域名。

步骤2:编写 Worker 代码

在 Worker 设置中,你需要编写自定义代码,用于处理 GitHub CDN 请求。以下是一个示例代码:

// 监听 'fetch' 事件,并使用 'handleRequest' 函数的结果来响应请求
addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

// 定义 GitHub 和 raw GitHub 域名的常量
const GITHUB_DOMAIN = 'https://github.com'
const RAW_GITHUB_DOMAIN = 'https://raw.githubusercontent.com'

// 定义用于匹配 GitHub 和 raw GitHub 内容的允许路径的正则表达式
const allowedGithubPath = /^\/[^\/]+\/[^\/]+\/releases\/download\/.*/;
const allowedRawPath = /^\/raw\/[^\/]+\/[^\/]+\/[^\/]+\/.*/;

// 定义 'handleRequest' 函数来处理传入的请求
async function handleRequest(request) {
  const url = new URL(request.url)
  let path = url.pathname

  let githubDomain;
  // 检查路径是否与允许的 GitHub 内容路径匹配
  if (allowedGithubPath.test(path)) {
    githubDomain = GITHUB_DOMAIN;
  } else if (allowedRawPath.test(path)) {
    // 如果路径与允许的 raw GitHub 内容路径匹配,使用 raw GitHub 域名,并从路径中移除 '/raw' 前缀
    githubDomain = RAW_GITHUB_DOMAIN;
    path = path.replace('/raw', '');
  } else {
    // 如果路径无效,返回 '403 Forbidden' 响应
    return new Response('无效的路径', { status: 403 })
  }

  // 通过连接域名和路径来构造 GitHub URL
  const githubUrl = githubDomain + path
  // 使用 'fetch' 函数获取 GitHub URL 的内容
  let githubResponse = await fetch(githubUrl, request)

  // 跟随重定向直到获得最终响应
  while (githubResponse.status >= 300 && githubResponse.status < 400) {
    const location = githubResponse.headers.get('Location')
    githubResponse = await fetch(location, request)
  }

  // 将响应数据作为 ArrayBuffer 获取
  const data = await githubResponse.arrayBuffer()

  // 使用来自 GitHub 响应的数据构造 'Response' 对象并返回
  const response = new Response(data, {
    status: githubResponse.status,
    statusText: githubResponse.statusText,
    headers: githubResponse.headers
  })

  return response
}

步骤3:部署 Worker

一旦你编写了 Worker 代码,点击保存并部署 Worker。Cloudflare 将自动将 Worker 部署到其全球网络中,以便它可以在边缘节点上运行。

步骤4:配置路由

最后,你需要配置路由,以确定哪些请求将被 Worker 处理。在 Cloudflare 控制台中的 Worker 设置中,配置适当的路由规则,以便 Worker 可以拦截 GitHub CDN 请求并加速它们。

现在,你已经设置好了 Cloudflare Worker,可以开始享受更快的 GitHub CDN 访问了。Worker 将代理 GitHub 请求,并从 Cloudflare 边缘节点提供更快的响应,从而提高了用户体验。

步骤4:绑定域名

Cloudflare Workers 默认提供一个类似于 your-worker-name.your-worker-subdomain.workers.dev 的域名,但在某些情况下,这个默认域名可能会受到网络限制,导致无法直连。为了解决这个问题,我们建议将 Cloudflare Worker 绑定到你自己的域名。

以下是如何将 Cloudflare Worker 绑定到自己的域名的步骤:

  1. 登录 Cloudflare 控制台: 首先,登录到你的 Cloudflare 帐户。

  2. 选择域名: 在 Cloudflare 控制台中,选择你想要绑定 Worker 的域名。确保你的域名已经添加到 Cloudflare 并配置了正确的 DNS 设置。

  3. 进入 Cloudflare Worker 详情页面: 在域名的概览页面,找到 "Workers" 部分,并点击 "Manage Workers" 或类似的选项。这将带你进入 Cloudflare Workers 的管理页面。

  4. 找到 Trigger 页: 在 Cloudflare Worker 管理页面中,寻找 "Trigger" 或 "触发器" 选项。这通常位于左侧菜单中。

  5. 绑定域名: 在 Trigger 页面,你将看到一个选项,允许你选择将 Worker 绑定到哪个域名。选择你希望用于加速 GitHub CDN 访问的域名,并保存设置。

一旦你成功将 Cloudflare Worker 绑定到你的域名,Worker 将能够在你的自定义域名上运行,从而保证了访问的稳定性。这意味着用户将能够通过你的域名直接访问 GitHub CDN,而不受到默认域名可能存在的限制。

总结

使用 Cloudflare Worker 来加速 GitHub CDN 访问是一个有效的方法,特别是在网络受限或速度较慢的情况下。通过将代码运行在全球分布式网络中,你可以减少延迟,提高性能,从而更快地获取 GitHub 仓库中的文件。希望本文对你有所帮助,让你更好地利用 GitHub 的资源。