Files
Nexus/docs/design/specs/2026-06-12-remote-browser-retired-lessons.md
T
Nexus Agent ba7c790f38 feat(watch): show probe history in Beijing time and retire remote browser
Monitoring history charts and tables now format UTC timestamps as Asia/Shanghai.
Remove Playwright worker, global browser panel, and related API routes; open site URLs in a new tab instead. Fix chain test Redis pipeline mock.
2026-06-13 16:32:02 +08:00

3.6 KiB
Raw Blame History

远程内置浏览器方案 — 下线经验(2026-06-12

状态:已整体移除(代码 + API + Worker 目录)。下次换方案前必读本文。
历史设计归档见 docs/design/specs/2026-06-11-server-browser-chromium-design.md 等。

演进简史

阶段 方案 结果
1 全局浮动窗 + iframe 嵌站点 大量站点 X-Frame-Options 拒嵌 → 已移除
2 独立 WorkerPlaywright + JPEG screencast+ Nexus 桥接 WS + 前端 canvas 2026-06-12 下线

曾验证可行的部分

  • Worker GET /health、主站 NEXUS_BROWSER_* 门控、会话 X-Nexus-Worker-Key 鉴权链路可通。
  • Page.startScreencast + cdp.on("Page.screencastFrame") 能推 JPEG 到前端 canvas(冒烟 ~4KB/帧)。
  • 显式 NAVIGATE 双端 validate_navigation_url 可挡明显 SSRF。
  • 服务器页「站点」用域名拼 https:// 打开(guessSiteUrlFromDomain)简单可靠。

未达标的根因(勿重复踩坑)

1. 产品 / UX

  • 浮动窗 + 最小化条 + 顶栏按钮 + 默认收起/展开状态机过于复杂,易出现「看不见窗」「展开黑屏」。
  • 用户真实诉求是「在运维后台旁路打开站点」,新标签 window.open 往往足够;内嵌 canvas 收益不成比例。

2. 技术

  • 黑屏:最小化/切标签/重连时 canvas 与 WS 会话生命周期不同步;disconnect 后未稳定 connect+navigate;容器尺寸为 0 时 viewport 异常。
  • 验证码:阿里云等需 headed + 反自动化 + 人工拖动;Worker 侧成本高且仍不稳定。
  • SSRFP1:仅校验显式 NAVIGATE;页内点击/302 逐跳校验(设计文档要求但未完)。
  • 多 workersession_registry 进程内字典,uvicorn 多进程时 WS 可能 4403。
  • 运维Worker 8443 防火墙、TLS 自签、会话泄漏(reservation idle)需持续值守。

3. 工程

  • 前后端 + Worker 三仓逻辑 + admin_ui_preferences 状态同步,变更面大、门控/审计成本高。
  • 与监测槽/文件/终端等主线并行时,合并与部署易拖慢主线。

下线后保留

保留 说明
frontend/src/utils/browserUrl.ts 服务器列表「站点」→ 新标签打开
设计/审计/changelog 历史 仅供复盘,勿当 SSOT
MySQL admin_ui_preferencesembedded_browser 可留可清,不再读写

下次可选方向(未选型)

  1. 维持新标签(当前):零维护,无 SSRF 面在 Nexus 内。
  2. RDP / noVNC 到子机桌面浏览器:已有 RDP 栈时可复用,但资源重。
  3. SSH 隧道 + 本地 Chrome:仅高级用户,不适合默认产品路径。
  4. 第三方堡垒机式 Web 终端浏览器:参考 JumpServer,独立产品级投入。
  5. 若再做内嵌:必须先闭环 framenavigated SSRF单进程会话注册表/Redis验证码策略E2E 黑屏回归,再动 UI。

验收清单(换方案时)

  • 明确是否必须内嵌(vs 新标签/远程桌面)
  • 威胁模型:SSRF、Worker 暴露面、会话归属
  • 最小 UI:一种入口、一种展开态,避免三套入口(地球/顶栏/最小化条)
  • 门控:定向 pytest + 生产 /api/browser/* 不存在或 404
  • 下线时:删路由、删前端、删 Worker 部署、文档一篇 lessons

相关文档

  • Changelogdocs/changelog/2026-06-12-remove-remote-browser.md
  • 审计(历史):docs/audit/2026-06-12-remote-browser-worker.md
  • 巡查(历史):docs/reports/2026-06-12-remote-browser-bug-patrol.md