绿联NAS运行OpenClaw + 群晖反向代理,解决远程访问身份验证与1006断开问题

前言

好消息,绿联自带了openclaw部署
坏消息,远程访问绿联的openclaw的话,会遇到device identity required的问题

遇到的两大“拦路虎”

现象一:HTTP 直连报 “Device Identity Required”

最初,我尝试直接从绿联 NAS 的 IP 地址通过 HTTP 访问 OpenClaw (http://192.168.x.x:端口)。

2

  • 表现:页面能打开,但在输入 Token 后,系统一直提示 device identity required,无法进入主界面。
  • 原因:OpenClaw 出于安全考虑,强制要求设备指纹生成必须在 安全上下文 (Secure Context) 中进行。浏览器认为 http://IP 是不安全的,因此拒绝生成设备身份凭证。
  • 结论必须使用 HTTPS 才能通过身份验证。

现象二:HTTPS 反向代理报 “Disconnected (1006)”

为了解决第一个问题,我在群晖 NAS 上配置了反向代理:

  • 来源https://我的域名:自定义端口 (群晖)

  • 目的地http://绿联内网IP:OpenClaw端口 (绿联)

    1

配置完成后,通过 https://我的域名:端口 访问:

  • 表现:登录界面正常加载,Token 也能填入,但一旦尝试连接,界面立刻断开,控制台报错:

    Disconnected (1006): no reason

  • 原因:OpenClaw 的前端强依赖 WebSocket 进行实时通信。群晖的反向代理默认只处理普通 HTTP 请求,**不会自动转发 WebSocket 的升级握手 (Upgrade Handshake)**。导致连接建立瞬间被切断。

终极解决方案

要完美运行 OpenClaw,我们需要完成两步走:启用 HTTPS(解决身份验证)+ 配置 WebSocket 标头(解决 1006 断开)。

由于我的应用跑在绿联,网关在群晖,所以关键配置需要在群晖的反向代理中完成

第一步:确认基础连通性

确保你的绿联 NAS 固定了内网 IP(例如 192.168.1.50),并且 OpenClaw 容器端口(假设是 18789)在局域网内可通过 http://192.168.1.50:18789 正常访问(虽然会报身份错误,但页面能出来说明网络是通的)。

第二步:在群晖 NAS 配置反向代理 (关键)

登录你的 群晖 DSM 后台,进行以下操作:

  1. 进入设置入口

    • 打开 控制面板 (Control Panel) > **登录门户 (Login Portal)**。
    • 点击 高级 (Advanced) 选项卡 > **反向代理服务器 (Reverse Proxy)**。
  2. 编辑规则

    • 找到你为 OpenClaw 创建的规则(来源是 https://域名,目的地是 http://绿联IP)。

    • 选中它,点击 **编辑 (Edit)**。

  3. **添加 WebSocket 支持 (核心步骤)**:

    • 点击窗口下方的 自定义标头 (Custom Header) 按钮。
    • 点击 **创建 (Create)**。

    方案 A:如果有预设模板(推荐)

    • 在下拉菜单中直接选择 WebSocket。群晖会自动填入所需配置。

    方案 B:手动添加(如果没有模板)

    • 你需要手动添加两条标头,请严格按照以下内容填写:
    标头 (Header) 值 (Value) 说明
    Upgrade $http_upgrade 告诉后端升级协议
    Connection upgrade 保持连接升级状态

    (可选优化) 为了防止长时间无操作断开,建议再添加一条:
    | Proxy-Read-Timeout | 600 | 增加读取超时时间 |

    3

  4. 保存生效

    • 点击 保存 关闭标头窗口。
    • 再次点击主窗口的 保存 应用规则。

第三步:清理缓存并验证

配置完成后,浏览器的旧缓存可能会干扰测试。

  1. 强制刷新:按 Ctrl + F5 (Windows) 或 Cmd + Shift + R (Mac)。
  2. 无痕模式测试:打开浏览器无痕窗口,访问 https://你的域名:端口

预期结果

  1. 页面正常加载,不再提示 device identity required(因为现在是 HTTPS 环境)。
  2. 输入 Token 后,左下角状态指示灯变为 **绿色 (Connected)**。
  3. 不再出现 Disconnected (1006) 报错,可以正常与 AI 交互。

原理解析:为什么要这么做?

很多用户会疑惑,为什么简单的反向代理不行?

  • 关于 Device Identity:现代浏览器(Chrome, Edge, Safari)的安全策略规定,涉及敏感权限(如生成唯一设备指纹)的操作,必须在 HTTPSlocalhost 环境下进行。这就是为什么 HTTP 直连会被拦截。通过群晖配置 HTTPS 证书,我们满足了这一安全要求。
  • 关于 Error 1006:OpenClaw 不是普通的静态网站,它是一个实时应用。前端需要通过 WebSocket 长连接向后端发送指令和接收日志流。
    • 普通 HTTP 请求是“一问一答”。
    • WebSocket 请求需要先发送一个 Upgrade: websocket 的握手包。
    • 群晖默认的反向代理配置会忽略这个特殊的握手包,直接将其当作普通 HTTP 请求转发给绿联,绿联的 OpenClaw 收到后觉得“这不是个合法的 WS 请求”,于是直接断开连接,浏览器就收到了 1006 (异常关闭) 错误。
    • 我们添加的 UpgradeConnection 标头,就是明确告诉群晖:“如果遇到带有升级头的请求,请不要拦截,原样透传给后端,并维持长连接。”

总结

绿联 NAS 部署应用 + 群晖 NAS 做反向代理 的混合架构中,部署 OpenClaw 的关键点在于:

  1. 必须启用 HTTPS:解决浏览器的安全策略限制 (device identity required)。
  2. 必须配置 WebSocket 标头:在群晖反向代理中手动添加 UpgradeConnection 标头,解决实时通信断开问题 (1006)。

只要做好这两步,无论你的应用跑在绿联、威联通还是其他 Docker 设备上,只要通过群晖统一出口,都能完美运行。

如果没有群晖的话,Lucky也可以!!!很火的一个docker容器!!绿联也自带了!!

希望这篇跨品牌部署教程能帮到你!如果你的 NAS 组合更复杂,欢迎在评论区交流。


参考链接: