AList如何使用代理下载链接 |
您所在的位置:网站首页 › 怎么用视频做链接 › AList如何使用代理下载链接 |
# 下载代理 URL 开启代理时不填写下载代理 URL字段,默认使用本机进行传输。下载代理 URL提供了两种代理方式安装: 可以使用 Cloudflare Workers 做代理,这里填写 Workers 地址即可。 Workers 代码可以在 https://github.com/alist-org/alist-proxy/blob/main/alist-proxy.jsopen in new window 找到,实际使用时需要替换其中的这两个变量: ADDRESS: 你的 AList 地址,必须加上协议头,后面不能跟 /。如 https://pan.nn.ci;TOKEN: 在 AList 管理页面中进入“其他设置”得到。⚠️ Cloudflare Workers 中转AList,AList的端口只能跑在80或者443 否则cf不给入站(否则无法进行中转代理) 在AList后台挂载配置时 填写 下载代理URL 时候的 链接结尾 不可以带 /详细文字教程:点击查看 也可以使用另一台机器进行代理,在 https://github.com/alist-org/alist-proxy/releasesopen in new window 下载程序通过 ./alist-proxy -help 查看使用方法后 详细文字教程:点击查看 我们下面正式开始吧介绍吧 # 1. Cloudflare Workers首先我们先打开 cloudflareopen in new window首页找到左侧侧边栏的Workers和Pages点击新建一个应用程序 新建应用程序的名字随便写,自己知道是做什么的就行,为了方便这里起名叫 alist-proxy,至于里面的内容不用管,点击部署即可。 点击部署后我们会自动跳转到新建的 Workers 应用程序內,我们在右上角点击 快速编辑 进行修改。 然后我们将AList提供的proxy.jsopen in new window代码复制进去,进行修改内容,然后右上角部署保存,保存好后继续回到这个Workers 应用程序內 "YOUR_ADDRESS":我们改成需要被代理的AList链接,链接需要携带请求头 HTTP或者HTTPS,链接最面不可以带 / "YOUR_TOKEN":你的AList Token,直接去AList后台 --> 设置 --> 其他 --> 令牌,填写进去 不需要抓包!! proxy.js 备用// src/const.ts var ADDRESS = "YOUR_ADDRESS"; var TOKEN = "YOUR_TOKEN"; // 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 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;" } } ); 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); 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/index.ts var src_default = { async fetch(request, env, ctx) { if (requesthod === "OPTIONS") { return handleOptions(request); } return handleDownload(request); } }; export { src_default as default }; //# sourceMappingURL=index.js.map回到 Workers 应用程序后下拉一点儿,找到触发器选项,然后点击右下角的添加路由 添加这些选项之前我们需要先在 cloudflareopen in new window 解析一个域名才可以添加 路由:为了方便区分我们也写和 Workers应用程序名一样的吧,alist-proxy.alist.org/*open in new window⚠️ 注意结尾的 /*必须要携带区域:选择我们我们路由使用的域名,alist.orgopen in new window添加好保存后,会在下面看到我们添加的路由 路由添加完了,我们回到首页点击左侧侧边栏顶部的网站,找到我们解析的域名点击进去,进入域名內后左侧找到 DNS 选择记录,我们添加一个记录 这个记录有三种办法,以及一个其他 类型选择CNAME,名称正常写(解析访问使用的-例如也叫alist-proxy),目标:写我们上一张图添加完路由后显示的链接上面那个,alist-proxxxorkers.dev类型选择A,名称正常写(解析访问使用的-例如也叫alist-proxy),IP地址,写我们优选的cloudflare IP,至于怎么优选看你自己了类型选择CNAME,名称正常写(解析访问使用的-例如也叫alist-proxy),目标:写大佬优选好的IP负载(合集)(下面三句话是大佬原话懂得自己操作) 1.可以优选后添加到另外的域名做cname,2.和域名负载均衡方法一样 多个同样的A记录 不同的ip,3.然后cf那边cname那个二级域名就是了host本地优选劫持 ( 这个其他的比较特殊,我也不会是大佬告诉我的,不知道忽略即可)⚠️⚠️⚠️ 以上三种办法添加记录的时候都需要把 小云朵 关闭 到这里已经已经搭建好了,下面我们去测试一下吧,先去AList后台挂载的下载代理URL里面填写一下域名,什么?不知道填那个? 填我们 上一步添加记录时的的名称 我们解析的是 alist-proxy,是在alist.org这个域名內解析的 那么我们在AList后台挂载的下载代理URL里面填写 https://alist-proxy.alist.orgopen in new window 即可 (这个只能是给填写 proxy.js 时里面提到的域名使用 别人无法使用) 下面的就是我们测试的,原本这个是302直连的,我们改成了下载代理URL 所以变了 变了说明没有问题 至于速度快不快 那是另说了,速度慢的问题自行解决 本人不负责解决。 # 使用期间的Q&A环节Q1:为什么要在cloudflare解析一个域名? A1:因为 cloudflare 默认自带的域名 xxx.xxx/workers,dev被墙了 无法打开 Q2:不要看网络上的教程执行netsh interface tcp set global autotuninglevel=disabled A2:会造成pot等播放器缓冲缓慢 如果你pot播放CF中转直链速度不正常 cmd 管理员模式输入 netsh interface tcp set global autotuninglevel=normal 后重启 Q3:Cloudflare Workers使用有什么问题吗? A3:有的,Cloudflare Workers 中转AList,AList的端口只能跑在80或者443 否则cf不给入站(否则无法进行中转代理) # 2. 通用二进制先来到 alist-proxy二进制 open in new window 下载二进制程序包,下载好解压出来 使用前也是需要进行授权,授权完使用./alist-proxy -help都有哪些命令 [root@ser452314994926 proxy]# chmod +x alist-proxy [root@ser452314994926 proxy]# ./alist-proxy -help Usage of ./alist-proxy: -address string alist address -cert string cert file (default "server.crt") -help show help -https use https protocol. -key string key file (default "server.key") -port int the proxy port. (default 5243) -token string alist token # 简单详细复杂的启动教程下载程序后启动示例 (填写不需要携带[]符号) HTTPS方式:./alist-proxy -address [需要代理的AList域名] -cert [证书路径] -https [启用HTTPS] -key [证书key路径] -token [AListtoken] HTTP方式:./alist-proxy -address [需要代理的AList域名] -token [AListtoken] 带参数后启动例子 HTTPS方式:./alist-proxy -address http(s)://alist.org -cert /路径自己放/xxx/server.crt. -https true -key /路径自己放/xxx/server.key -token alist-5229xxxxxxxxxxxxxxxYFnL HTTP方式:./alist-proxy -address http(s)://alist.org -token alist-5229xxxxxxxxxxxxxxxYFnL AList Token是在这里获取open in new window | AList后台 --> 设置 --> 其他 --> 令牌 alist-proxy启动默认参数是 5243,有需要的可以带 -port [自定义端口号] 启动 这个下载代理URL如何添加域名,参考如何给AList程序添加域名的流程一样,进行反向代理添加域名即可 如果不添加域名可以使用 http://IP:5243填写 如何进行守护进程这个下载代理URL:参考手动安装AListopen in new window文档里面的守护进程方法 为什么要守护进程?不守护进程你离开终端程序就停止了。将第8行代码ExecStart=path_alist/alist server这一行里面的 alist server 参数改成上面你需要的就行 例1:ExecStart=path_alist/alist-proxy -address http(s)://alist.org -token alist-5229xxxxxxxxxxxxxxxYFnL例2:ExecStart=path_alist/alist-proxy -address http(s)://alist.org -cert /路径自己写/xxx/server.crt. -https true -key /路径自己写/xxx/server.key -token alist-5229xxxxxxxxxxxxxxxYFnL如果你会手动安装AList那肯定也会这个,至于不会手动修改后续出了手动安装Linux AList教程视频的时候会更新过来到时候可能会更明白一些 通用二进制代理示例(左侧图)正常下载是302模式,直接返回了官方的下载链接,然后我们在AList挂载配置里面设置了代理(图右),然后点击下载同样的文件返回的是代理的IP(因为我使用的是 IP:端口号 方式) # 使用期间的Q&A环节Q1:使用通用二进制有什么优劣吗? A1: 优点是如果代理的机器带宽越大你下载的越快(也是看上行速率的),缺点就是比较费流量好像是需要占用双份流量先下载一份,然后代理给你上传一份,在加上机器的流量不是无限的,如果是无限的长期大量占用带宽估计会有封机器风险。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |