在大陆服务器上部署项目时,经常需要从拉取境外的数据例如代码库、模型,此时大概率会碰到网络连接问题,非常让人恼火。本篇文章将会介绍使用 Cloudflare Workers 免费版搭建反向代理的流程,通过搭建反向代理,可以实现以下功能:
直链下载加速。
如:GitHub repo 克隆、GitHub release 下载、wget 下载。
******
如:Hugging Face 模型下载、OpenAI API 访问。
反盗链绕过。
如:绕过 Pixiv 图片直链反盗链。
开启跨域。
如:绕过他人提供的 API 的跨域限制。
本文部署方案需要的条件有:
Cloudflare 免费版(及以上)账号
任意域名
本文转自我的个人博客,前往可获得最佳排版体验。 原文链接:https://www.zouht.com/3740.html 本文使用:CC BY-NC-SA 4.0 许可
******
首先前往 https://dash.cloudflare.com/sign-up 注册 Cloudflare 账号,若已经有账号那直接前往 https://dash.cloudflare.com/login 登录即可。
在 Cloudflare 的面板左侧选择 Workers 选项卡,然后点击右侧的“创建应用程序”按钮。然后点击新页面的“创建 Worker”按钮,命名后直接点击部署即可。


创建后,我们点击新页面的“编辑代码”按钮,进入代码编辑页面,然后将以下代码覆盖掉左侧代码框的内容。
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;
} 然后点击右上角部署,即可将代码部署到 Worker:

部署后,在设置->触发器->路由找到 Worker 的访问链接:

通过浏览器访问该链接,应该会返回以下信息:
当然,大概率你是会卡住,没办法直接访问到这个页面的。******。这就是为什么我们需要准备一个域名了。
我们首先要将自己的域名 DNS 托管给 Cloudflare,我们在控制台选择“网站”选项卡,然后点击”添加站点“按钮,根据 Cloudflare 的提示将 DNS 更改为 Cloudflare.

添加域名后,再进入刚才创建的 Cloudflare Worker 页面,点击添加”自定义域“,即可完成域名绑定了。

****** 因此绑定自定义域名后,我们用自己的域名是可以直接访问到的。并且 Cloudflare 的路由质量还是非常不错的,因此直连速度还是不错的。
这个代码的使用方式非常简单,将自己的链接跟在 / 后面就行了。例如:
原始链接:https://www.example.com/example.zip
反代链接:https://<你绑定的 Worker 域名>/https://www.example.com/example.zip
可以发现我提供的代码内特意写了 specialCases 处理,这个是为了处理一些网站的反盗链规则。规则的配置格式如下所示:
<域名>: {
"Origin": <Origin规则>,
"Referer": <Referer规则>
} 其中,Origin 规则和 Referer 规则的取值可以为:
DELETE: 删除该请求头
KEEP: 保持请求头不变
自定义: 将请求头更改为指定的值
例如 Pixiv 的图片直链 CDN 限制了 Referer 来源是 https://www.pixiv.net/,那么我们就可以配置以下规则:
const specialCases = {
"i.pximg.net": {
"Origin": "DELETE",
"Referer": "https://www.pixiv.net/"
},
"i-cf.pximg.net": {
"Origin": "DELETE",
"Referer": "https://www.pixiv.net/"
},
"*": {
"Origin": "DELETE",
"Referer": "DELETE"
}
} 需要注意的是,* 规则代表未匹配的其他所有站点,建议保持不变。
使用阿里云上海服务器测试从 Huggingface 上下载 internlm2-chat-7b 模型。结果如下:

直连:无法建立连接

反代:跑满服务器 12MB/s 下行限速

直连:直接卡死

加速:顺利克隆
本人自己也使用了快半年,实测各大云服务器厂商服务器的网络连接 Cloudflare 都是很顺利的,因此在服务器上用它 clone 代码还是很舒服。不过在自己本地网络连接就有点看运气了,有时候是可以用的,有时候一样很卡。可能云服务器的商业线路质量更高吧。