Post

使用 Cloudflare Workers 加速 Github 静态资源

今天更新一篇文章,教大家如何利用 Cloudflare Workers 搭建一个 Github 图片资源的反代。

说是反代,其实说白了就是一个简单的 url 替换,让它走一遍 Cloudflare 的 CDN。另外,除了图片,理论上所有 raw.githubusercontent.com 开头的静态资源应该都没问题。

开始之前不得不再次感慨,Cloudflare 真的是互联网公司的大善人,这一切居然是免费的。

具体步骤

打开 Cloudflare 主页,进到你要使用的域名,点击左侧的 Workers & Pages, 然后右边 “Create Application”

然后在创建页面点击 “Create Worker” ,下一步。

取一个你喜欢的 Name,比如我直接叫 “img”,下面的代码保持默认,然后点击 “Deploy”(不用理会下方截图上 Name 后面的 Not available,是因为写文章的时候我已经创建完一个了)

Cloudflare 这一点比较奇怪,必须先部署了才给编辑代码,点击 “Edit code”

修改 worker.js 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  // Cloudflare Workers 分配的域名
  cf_worker_host = "img.cloudflareusername.workers.dev";
  // 自定义的域名
  origin_host = "img.linshen.me";
  // GitHub 仓库文件地址
  github_host = "raw.githubusercontent.com/shawnlinboy/shawnlinboy.github.io/main/assets/img/posts";
  // 替换 2 次以同时兼容 Worker 来源和域名来源
  url = request.url.replace(cf_worker_host, github_host).replace(origin_host, github_host);
  return fetch(url);
}

cf_worker_host:你的 Worker 源地址,可以在右边的调试窗口看到,直接复制粘贴。

origin_host:你的图片地址域名

github_host:你 GitHub 仓库 assest 文件目录

大家千万要理解了再替换成自己的,不要闭眼抄。写完了点右上角 “Save and deploy”

最后不要忘记绑定域名和做一下地址转发。点击你刚才新建的 Worker 里面的 “Triggers”,在 Custom Domains 里输入上面的 origin_host,再在 Routes 里绑定 origin_host 的所有 path,比如我这里就是 img.linshen.me/*

大功告成!

Jeklly CDN 设置

如果你在用的 Jeklly 主题有 CDN 相关的设置,可以编辑 _config.yml 把图片前缀替换掉,比如我使用的 Chirpy 主题就提供了这个功能。

1
2
3
4
5
6
# The CDN endpoint for images.
# Notice that once it is assigned, the CDN url
# will be added to all image (site avatar & posts' images) paths starting with '/'
#
# e.g. 'https://cdn.com'
img_cdn: https://img.linshen.me

参考文章

https://senjianlu.com/2021/12/cloudflare-workers-image

This post is licensed under CC BY 4.0 by the author.