From 826b41e781714403eb92a6e4d2efbca44d9c39e1 Mon Sep 17 00:00:00 2001 From: anonsaber Date: Wed, 30 Sep 2026 16:24:32 +0800 Subject: [PATCH] =?UTF-8?q?worker:=20=E4=BF=AE=E6=8E=89=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E4=BC=9A=E8=AE=A9=20Worker=20=E9=83=A8=E7=BD=B2=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=85=8D=E7=BD=AE=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - wrangler.toml 用 JSDoc 的 /** */ 注释,TOML 解析器把 '*' 当未知字符 (wrangler 报 Unknown character 47),deploy/secret put/dev 在读取配置阶段 就失败,根本走不到你的 secret。全部展开成 '#' 行。 - npm test 写成 node --test test/,Node 22.23 会把 test/ 当模块路径去 require,报 MODULE_NOT_FOUND。改成 node --test(无参数自动发现 test/), 仍为 32 个用例全通过(backends 6 / health 4 / index 12 / lb 10)。 wrangler deploy --dry-run 现通过(wrangler 3.114.17,上传 31.48 KiB)。 --- cloudflare-worker/package.json | 2 +- cloudflare-worker/wrangler.toml | 44 +++++++++++++++++++-------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/cloudflare-worker/package.json b/cloudflare-worker/package.json index 1745518..862f939 100644 --- a/cloudflare-worker/package.json +++ b/cloudflare-worker/package.json @@ -5,7 +5,7 @@ "type": "module", "description": "MessageWeave Cloudflare Worker: 统一 HTTPS 入口 + 多后端 origin 故障转移(透传模型,SAF-LB-PASSTHRU)。零运行时依赖(仅 ES2022 + Fetch API),可直接 node --test。", "scripts": { - "test": "node --test test/", + "test": "node --test", "check": "node --check src/*.js && node --check test/*.test.js && wrangler deploy --dry-run --outdir=.build-check", "deploy": "wrangler deploy", "dev": "wrangler dev --local" diff --git a/cloudflare-worker/wrangler.toml b/cloudflare-worker/wrangler.toml index 9f754aa..cd4c804 100644 --- a/cloudflare-worker/wrangler.toml +++ b/cloudflare-worker/wrangler.toml @@ -1,28 +1,34 @@ -/** - * Wrangler 示例配置 — MessageWeave 多实例 LB/HA(ARCH-LB-WORKER / deployment.md §10)。 - * - * 安全约束(docs/charter.md §3/§5,稳定 ID 注册表 §8): - * - 后端 origin 仅允许 https(C-HTTPS-INBOUND / C-HTTPS-URL);env 校验时拒绝 - * http/非 https/内嵌凭据。 - * - 不代理 Redis/JMAP(C-NO-DB / C-REDIS-ONLY-STATE):Worker 只做请求转发,后端连自己的 Redis。 - * - 不使用 WebSocket/SSE/长轮询(C-NO-LONG-CONN):纯请求-响应转发。 - * - 后端 secret 走 `wrangler secret`(见 README),不进代码/日志(SAF-LOG-PURITY / C-NO-SECRET-IN-IMAGE; - * C-LB-SHARED-SECRETS:所有后端实例共享同一组 secret)。 - * - 日志无密钥(SAF-LOG-PURITY):只打「方法/路径/origin/失败类别」,origin 清单走 secret。 - * - 仅允许转发 safelist 路由(C-LB-SINGLE-REG-URL);未知路径 404。 - * - * 部署: - * cd cloudflare-worker - * npx wrangler secret put BACKEND_ORIGINS_JSON # 见下方示例格式 - * npx wrangler deploy - */ +# Wrangler 配置 — MessageWeave 多实例 LB/HA(ARCH-LB-WORKER / deployment.md §10)。 +# +# 注意:TOML 只支持 '#' 注释。这里曾经用 JSDoc 的 /** */ 块,Cloudflare 的 TOML +# 解析器会把 '*' 当成未知字符(wrangler 报 Unknown character "47"),deploy / +# secret put / dev 在读取配置文件时就失败——所以全部展开成 '#' 行。 +# +# 安全约束(docs/charter.md §3/§5,稳定 ID 注册表 §8): +# - 后端 origin 仅允许 https(C-HTTPS-INBOUND / C-HTTPS-URL);env 校验时拒绝 +# http/非 https/内嵌凭据。 +# - 不代理 Redis/JMAP(C-NO-DB / C-REDIS-ONLY-STATE):Worker 只做请求转发,后端连自己的 Redis。 +# - 不使用 WebSocket/SSE/长轮询(C-NO-LONG-CONN):纯请求-响应转发。 +# - 后端 secret 走 `wrangler secret`(见 README),不进代码/日志(SAF-LOG-PURITY / C-NO-SECRET-IN-IMAGE; +# C-LB-SHARED-SECRETS:所有后端实例共享同一组 secret)。 +# - 日志无密钥(SAF-LOG-PURITY):只打「方法/路径/origin/失败类别」,origin 清单走 secret。 +# - 仅允许转发 safelist 路由(C-LB-SINGLE-REG-URL);未知路径 404。 +# +# 部署: +# cd cloudflare-worker +# npx wrangler secret put BACKEND_ORIGINS_JSON # 见下方示例格式 +# npx wrangler deploy + name = "messageweave-lb" main = "src/index.js" compatibility_date = "2025-01-01" compatibility_flags = ["nodejs_compat_v2"] # 统一 HTTPS 入站(C-HTTPS-URL;平台代 TLS,Worker 内为短请求模型)。 -# 后端 origin 为 secret(不经明文 env 流转): +# 后端 origin 为 secret(不经明文 env 流转)。BACKEND_ORIGINS_JSON 只接受 +# 「字符串数组」——每项是一个 https origin;不支持 {"url":…, "weight":…} 这种 +# 对象形式(parseBackendOrigin 只认字符串,对象项会让整份配置解析失败, +# 而配置是**每个请求**重新解析的,所以会表现为**每个请求都 503**,不是启动即失败): # BACKEND_ORIGINS_JSON 形如 ["https://a.platform1.example","https://b.platform2.example"] # LB_HEALTH_TTL_MS 可选,健康缓存 TTL(默认 30000) # LB_REQUEST_TIMEOUT_MS 可选,单 origin 超时(默认 10000,建议 > 最坏 cold start)