树洞剪藏#剪藏#树洞剪藏

AList使用Cloudflare Workers加速onedrive - Muse

2024 年 11 月 18 日1 分钟
分享Twitter / XTelegram微博
AList使用Cloudflare Workers加速onedrive - Muse 封面

同步来源:树洞剪藏 源站剪藏 ID:109 原文地址:https://blog.pepaper.org/2024/11/alist%e4%bd%bf%e7%94%a8cloudflare-workers%e5%8a%a0%e9%80%9fonedrive/

打开原文 · 打开源站剪藏快照


AList使用Cloudflare Workers加速onedrive - Muse

跳至内容

Muse

自我介绍

AList使用Cloudflare Workers加速onedrive

这是一个基于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。

已发布

2024-11-11

分类

萌新学习日记

来自

Muse

标签:

AList加速 , Cloudflare Workers , 代理URL设置 , 创建Cloudflare Worker , 配置Workers路由

评论

发表回复 取消回复 您的邮箱地址不会被公开。 必填项已用 * 标注 评论 * 显示名称 *

邮箱 *

网站

在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。

此站点使用Akismet来减少垃圾评论。 了解我们如何处理您的评论数据 。

Muse

WordPress

隐私政策

相关文章