Cloudflare Worker简介

随着云服务发展日渐完善,以亚马逊云的 AWS Lambda 为首的 Serverless(无服务器应用)服务早在几年前就已经开始普及。

Serverless 服务商提供了一个无需预置或管理基础设施即可运行代码的环境,换句话说就是现在不仅不需要管理自己的硬件服务器、网络等,甚至连购置云服务器或者容器平台都不再需要,只要用户编写和部署代码到 Serverless 平台即可。

CF 借助于他们分布在全球每个角落的大量边缘节点的优势,与传统无服务供应商将 Serverless 部署与各个中心机房不同,CF workers 将用户的函数服务部署在 他们的边缘网络(Edge Network)中,这使函数服务更加接近于客户端测,从而提供更优质的体验。

(抄的,大家知道Cloudflare作为cdn服务商,可以利用cdn网络的优势来实现 Serverless 应用即可)

Cloudflare Worker免费方案拥有10万次/日的请求限额,对于个人使用已经足够,基本没有被墙的cdn条件也给布置一些反向代理类的应用创造了条件。

Cloudflare Worker的用法

首先登录Cloudflare账号

由于Worker的默认子域workers.dev被墙(废话这么多人用一个域名不被墙才怪),需要自己有一个域名并在Cloudflare处托管,可以按照我在Hexo搭建博客部署到Github Pages的个人经验上的写的办法,注册us.kg域名,或者也可以按照下面这个Youtube视频的办法。

打开Worker页面,点击创建

创建成功后点击编辑代码,就可以进入Workers的代码编辑器,其实是一个在线VSCode

部署之后可以到设置-域与路由处添加自定义域名

这样就可以用自己的域名访问Cloudflare Worker上部署的项目了。

Cloudflare Worker上的的DOH转发器

这个项目来自tina-hello/doh-cf-workers。弄这个的背景是我常用的代理软件Mihomo Party和Flclash都有覆写配置文件DNS的选项,我就想自己搭建一个利用Cloudflare边缘节点的dns-over-https服务器,搭配自己的域名,实现对被阻断的cloudflare官方doh的代理。

代码并不复杂,原始项目也是开源的,简单来说就是把cloudflare或者其它DOH服务进行反向代理,在请求dns解析时将解析转发给给定的DOH服务器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });

// index.js
var doh = "https://security.cloudflare-dns.com/dns-query";
var dohjson = "https://security.cloudflare-dns.com/dns-query";
var contype = "application/dns-message";
var jstontype = "application/dns-json";
var path = "";
var r404 = new Response(null, { status: 404 });
var doh_cf_workers_default = {
async fetch(r, env, ctx) {
return handleRequest(r);
}
};
async function handleRequest(request) {
let res = r404;
const { method, headers, url } = request;
const { searchParams, pathname } = new URL(url);
if (!pathname.startsWith(path)) {
return r404;
}
if (method == "GET" && searchParams.has("dns")) {
res = fetch(doh + "?dns=" + searchParams.get("dns"), {
method: "GET",
headers: {
"Accept": contype
}
});
} else if (method === "POST" && headers.get("content-type") === contype) {
const rostream = request.body;
res = fetch(doh, {
method: "POST",
headers: {
"Accept": contype,
"Content-Type": contype
},
body: rostream
});
} else if (method === "GET" && headers.get("Accept") === jstontype) {
const search = new URL(url).search;
res = fetch(dohjson + search, {
method: "GET",
headers: {
"Accept": jstontype
}
});
}
return res;
}
__name(handleRequest, "handleRequest");
export {
doh_cf_workers_default as default
};
//# sourceMappingURL=index.js.map

另外也可以尝试一下Mozilla开源的serverless dns项目,这是基于Mozilla的Rethink DNS的DNS项目,支持DOH和DOT,还可以设置广告和追踪器过滤,我也部署了一个,打算后面改造家庭网络的过程中作为无污染DNS服务器的上游使用。

用Cloudflare Worker反代下载Docker镜像

感谢青柠大佬的帮助,在Docker镜像站大量关闭、Docker镜像拉取困难的环境下,这个反代给一般路过开发者和玩家不少选择。

在这里给出大佬的原链接,有需要的可以自己部署一个:https://qninq.cn/archives/cfdockerfast.html

用Cloudflare Worker反代Github资源

由于各种原因,Github相关的资源在中国内地访问并不顺畅,尤其是我的移动宽带,是知名的墙中墙。有一个Github的反代还是比较重要的。

这个操作学自Youtube博主七尺宇视频

其使用的是这位老哥的项目。这个项目也是可以使用Cloudflare Worker来部署的。

余谈

Cloudflare的cdn节点在全中国的访问速度依旧飘忽不定,大约在50-300ms不等,但至少比访问不上好。

优选IP的玩法我还没学会,等学会了再写吧。

在学习Cloudflare Worker的过程中,我还了解到了一个逆天玩意——用Cloudflare Worker部署Vless节点。虽然我最后还是尝试了一下,但是要知道这是明确违反Cloudflare的用户条款

Unless otherwise expressly permitted in writing by Cloudflare, you will not and you have no right to:

(j) use the Services to provide a virtual private network or other similar proxy services.

所以在这里我就不推荐了,确有需要者可以自行谷歌。