最近在玩ComfyUI的时候受到了下载模型的强烈痛苦,网上找了一圈也没有找到称心如意的工具,直接用代理下载大模型的话,流量很快就会告急…,而huggingface-cliht-transfer也各有各的问题。最后自己想了个办法,通过aria2可以多源下载的特点,在多个开源脚本的基础上自己糊了一个脚本,实现了满速下载大模型,具体细节请看这里。这里主要记录一下cloudflare woker脚本的部署方法。

需要准备的东西

  1. 注册一个cloudflare账号
  2. 白嫖或者买一个域名,因为cloudflare的域名DNS污染很严重,最好是用自己的域名,再说现在域名也不贵。
  3. 如果域名不是在cloudflare上购买的,就需要从其他域名服务商转移到cloudflare,让cloudflare来托管域名。cloudflare的DNS修改是真的快,用了之后再也回不去了。

开始

首先要先登录cloudflare,进入cloudflare的dashboard面板,选择Workers和Pages

dashboard.webp

概述页面点击创建

dashboard2

点击创建worker

dashboard3

这里名字可以随便填,如果要创建多个就r1r2这样的名字即可,填了之后你就会获得一个worker.dev的三级域名,不过因为我们要用自己的域名,所以无所谓。

dashboard4

填了名字后直接点击部署cloudflare会先创建一个默认的hello world脚本。

创建好后会进入woker详情页面,此时选择编辑代码进入脚本编辑器:

dashboard5

dashboard6

现在到去这里下载worker.js,把其中的内容复制出来,粘贴到编辑器中,或者直接将下面的内容复制进去:

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
/**
* Welcome to Cloudflare Workers! This is your first worker.
*
* - Run "npm run dev" in your terminal to start a development server
* - Open a browser tab at http://localhost:8787/ to see your worker in action
* - Run "npm run deploy" to publish your worker
*
* Learn more at https://developers.cloudflare.com/workers/
*/

addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
const specialCases = {
"*": {
"Origin": "DELETE",
"Referer": "DELETE"
}
}
function handleSpecialCases(request) {
const url = new URL(request.url);
const rules = specialCases[url.hostname] || specialCases["*"];
for (const [key, value] of Object.entries(rules)) {
switch (value) {
case "KEEP":
break;
case "DELETE":
request.headers.delete(key);
break;
default:
request.headers.set(key, value);
break;
}
}
}
async function handleRequest(request) {
const url = new URL(request.url);
if (url.pathname === "/") {
return new Response("Please enter the link after the /")
};
const actualUrlStr = url.pathname.replace("/", "") + url.search + url.hash;
const actualUrl = new URL(actualUrlStr);
const modifiedRequest = new Request(actualUrl, {
headers: request.headers,
method: request.method,
body: request.body,
redirect: 'follow'
});
handleSpecialCases(modifiedRequest);
const response = await fetch(modifiedRequest);
const modifiedResponse = new Response(response.body, response);
modifiedResponse.headers.set('Access-Control-Allow-Origin', '*');
return modifiedResponse;
}

dashboard8

然后点击右上角部署

部署成功后点击左上角r5(你刚刚填的名字)返回上一页,选择设置栏,在域和路由处点击添加

dashboard9

在弹出的侧边栏选择自定义域,填写你托管在cloudflare上的域名,起一个二级域名的名字,比如r5.yourdomain.com

dashboard10

结束

此时你的代理域名就搭建好了,你可以这样使用:

1
https://r5.yourdomain.com/https://xxx.com/file.zip

下载速度还可以,至少有好几Mb/s。

如果只使用一个代理服务器的速度肯定还是很慢,如何使用aria2实现多个源服务器并行下载来榨干下行带宽,请参考我这个脚本

更多内容请关注我的博客