Cloudflare Workers 版 AList 下载落地网关。它位于 AList 与 download worker 之间,负责安全验证、限流、票据签发,并渲染落地页/辅助下载体验。当前版本完全由 controller 下发配置与决策。
- 控制面驱动配置与路径决策(bootstrap + 动态 decision)。
- Turnstile / ALTCHA / Powdet 多层验证(Powdet 支持 argon2id/argon2d/randomx 多算法),支持 token binding 与跨验证 link 绑定。
- CF Rate Limiter + PostgREST 统一检查(限流 + token 消费 + 文件大小缓存)。
- 生成 download worker 票据:
payload/payloadSign(含 bindingStr)。 - 快速 302、落地页模式、webDownloader 分段下载与客户端解密。
- 下载 worker 选择支持随机或 HRW(小文件稳定分配)。
- 入口请求先处理内部控制 API(
/api/v0/*)与可选INNER_AUTH。 - 拉取 controller bootstrap + decision(内存/D1 缓存),并校验来源域名是否在允许列表。
/info:验证链 → 统一检查/限流 → 查询 AList 元信息 → 生成下载 URL → 返回 JSON(含 webDownloader/解密信息)。- 普通路径:校验签名 → 根据决策选择快速 302 或渲染落地页并下发挑战。
详细流程见 alist-landing-worker-architecture.md。
common:tokenHmacKey、signSecret、workerAddresses、landingWorkerAddresses、binding、alistBaseUrl、alistAuthHeaderslanding:pageSecret、frontend.*、turnstile/altcha/powdet、paths.*、db、crypt、webDownloader等
- 控制面连接:
CONTROLLER_URL、CONTROLLER_API_PREFIX、CONTROLLER_API_TOKEN、ENV、ROLE、INSTANCE_ID - Bootstrap 缓存:环境变量
BOOTSTRAP_CACHE_MODE(direct/d1)、INIT_TABLES;使用d1模式时还需配置 D1 绑定CACHE_D1 - 内部控制 API:
INTERNAL_API_TOKEN - 入口内网鉴权(可选):
INNER_AUTH_SECRET、INNER_AUTH_HEADER(默认X-Inner-Auth) - CF Rate Limiter(可选):
ENABLE_CF_RATELIMITER、CF_RATELIMITER_BINDING
业务策略与验证链参数全部由 controller 下发,wrangler 不再配置这些策略变量。
src/worker.js:Worker 入口与核心逻辑src/frontend.js:落地页脚本(验证流程、webDownloader、客户端解密)src/templates/:落地页模板controller/:控制面服务(bootstrap/decision/metrics)powdet/:Powdet 多算法(argon2id/argon2d/randomx)后端与静态资源snippets/:Cloudflare Snippet(sign.js)init.sql:PostgREST 所需表/函数wrangler.toml:部署与绑定说明pages_entrance/:Pages Functions 透明入口(Service Binding → Worker)
npm install
npm run dev
npm run build
npm run deploy前端静态资源需单独托管,并在 controller 的 landing.frontend.* 指向相应 URL。
用于自定义域名入口,保持请求透明转发到 Worker(Service Binding)。入口构建与部署位于 pages_entrance/:
node pages_entrance/build.mjs
wrangler pages deploy --config pages_entrance/wrangler.toml- 现已将随机
link纳入 Turnstile/ALTCHA/POWDET 的签名与校验,旧版前端若不透传link会直接 403。 - 多验证同时启用时要求
link一致,否则返回 463;若启用 Turnstile,需开启 binding(turnstileCookieExpireSeconds > 0)。 - Powdet 为多算法时,前端需提交
powdetSolutions数组并覆盖所有要求的算法(由verify-powdet-argon2id/verify-powdet-argon2d/verify-powdet-randomx决定)。
simple-alist-cf-proxy– download workerpowdet/– Powdet 后端