这是一个基于Cloudflare Workers加速AList的教程,旨在更好的加速onedrive下载
步骤 1: 打开 Cloudflare 并创建 Worker
- 登录到你的 Cloudflare 账户。
- 在左侧边栏中找到并点击 “Workers 和 Pages” 选项,进入 Workers 配置页面。
步骤 2: 创建一个 Worker 应用
- 在 Workers 和 Pages 页面中,点击 “创建” 按钮。
- 在弹出的窗口中选择 “创建应用程序” ,然后点击 “创建 Workers” 。
- 完成后,右下角会出现 “部署” 按钮,点击后你会看到提示 “成功!您的项目已部署到以下区域:全球” 。
步骤 3: 编辑 Worker 代码
- 点击 “继续处理项目” ,进入项目设置。
- 在右上角点击 “编辑代码” ,进入编辑模式。
- 复制并粘贴代码到
workers.js文件中 - 将代码中的 YOUR_ADDRESS 、YOUR_TOKEN 和 YOUR_WORKER_ADDRESS 替换为你的实际信息。
- 完成后点击 “部署” 按钮。
// src/const.ts
var ADDRESS = "YOUR_ADDRESS";
var TOKEN = "YOUR_TOKEN";
var WORKER_ADDRESS = "YOUR_WORKER_ADDRESS";
// src/verify.ts
var verify = async (data, _sign) => {
const signSlice = _sign.split(":");
if (!signSlice[signSlice.length - 1]) {
return "expire missing";
}
const expire = parseInt(signSlice[signSlice.length - 1]);
if (isNaN(expire)) {
return "expire invalid";
}
if (expire < Date.now() / 1e3 && expire > 0) {
return "expire expired";
}
const right = await hmacSha256Sign(data, expire);
if (_sign !== right) {
return "sign mismatch";
}
return "";
};
var hmacSha256Sign = async (data, expire) => {
const key = await crypto.subtle.importKey(
"raw",
new TextEncoder().encode(TOKEN),
{ name: "HMAC", hash: "SHA-256" },
false,
["sign", "verify"]
);
const buf = await crypto.subtle.sign(
{
name: "HMAC",
hash: "SHA-256"
},
key,
new TextEncoder().encode(`${data}:${expire}`)
);
return btoa(String.fromCharCode(...new Uint8Array(buf))).replace(/\+/g, "-").replace(/\//g, "_") + ":" + expire;
};
// src/handleDownload.ts
async function handleDownload(request) {
const origin = request.headers.get("origin") ?? "*";
const url = new URL(request.url);
const path = decodeURIComponent(url.pathname);
const sign = url.searchParams.get("sign") ?? "";
const verifyResult = await verify(path, sign);
if (verifyResult !== "") {
const resp2 = new Response(
JSON.stringify({
code: 401,
message: verifyResult
}),
{
headers: {
"content-type": "application/json;charset=UTF-8"
}
}
);
resp2.headers.set("Access-Control-Allow-Origin", origin);
return resp2;
}
let resp = await fetch(`${ADDRESS}/api/fs/link`, {
method: "POST",
headers: {
"content-type": "application/json;charset=UTF-8",
Authorization: TOKEN
},
body: JSON.stringify({
path
})
});
let res = await resp.json();
if (res.code !== 200) {
return new Response(JSON.stringify(res));
}
request = new Request(res.data.url, request);
if (res.data.header) {
for (const k in res.data.header) {
for (const v of res.data.header[k]) {
request.headers.set(k, v);
}
}
}
let response = await fetch(request);
while (response.status >= 300 && response.status < 400) {
const location = response.headers.get("Location");
if (location) {
if (location.startsWith(`${WORKER_ADDRESS}/`)) {
request = new Request(location, request);
return await handleRequest(request);
} else {
request = new Request(location, request);
response = await fetch(request);
}
} else {
break;
}
}
response = new Response(response.body, response);
response.headers.delete("set-cookie");
response.headers.set("Access-Control-Allow-Origin", origin);
response.headers.append("Vary", "Origin");
return response;
}
// src/handleOptions.ts
function handleOptions(request) {
const corsHeaders = {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,HEAD,POST,OPTIONS",
"Access-Control-Max-Age": "86400"
};
let headers = request.headers;
if (headers.get("Origin") !== null && headers.get("Access-Control-Request-Method") !== null) {
let respHeaders = {
...corsHeaders,
"Access-Control-Allow-Headers": request.headers.get("Access-Control-Request-Headers") || ""
};
return new Response(null, {
headers: respHeaders
});
} else {
return new Response(null, {
headers: {
Allow: "GET, HEAD, POST, OPTIONS"
}
});
}
}
// src/handleRequest.ts
async function handleRequest(request) {
if (request.method === "OPTIONS") {
return handleOptions(request);
}
return await handleDownload(request);
}
// src/index.ts
var src_default = {
async fetch(request, env, ctx) {
return await handleRequest(request);
}
};
export {
src_default as default
};
//# sourceMappingURL=index.js.map
参数说明:
ADDRESS:你的 AList 地址,必须加上协议头(例如:https://pan.nn.ci)且后面不能加/。TOKEN:在 AList 管理页面的 “其他设置” 中获取。WORKER_ADDRESS:你的 Worker 地址,通常与下载代理URL相同。
此处代码来源github请访问:https://github.com/alist-org/alist-proxy/blob/main/alist-proxy.js
步骤 4: 配置路由
- 返回到 “Workers 和 Pages” 页面,找到刚才创建的项目。
- 点击项目下的 “设置” ,然后选择 “添加” 。
- 在 “区域” 选择你的域名,并在 “路由” 中输入
www.example.com/*,点击 “添加路由” 。
步骤 5: 配置下载代理 URL
- 在设置中,找到 “下载代理 URL” 并填入正确的 URL。
- 根据需求,选择其他选项进行配置。
步骤 6: 配置DNS,优选Cloudflare IP
找到域名,然后进入DNS,填写 CNAME记录,代理域名(www.example.com)CNAME到cloudflare.182682.xyz(开启小黄云)
完成以上步骤后,你的 Cloudflare Worker 应该已经成功加速了 AList。
发表回复