dsh-public-origin:解决 DSH 插件在反向代理下的回环地址问题

前言

DeepSeek Harness (DSH) 采用插件化架构。当 DSH Web 部署在 VPS 上,通过公网域名(例如 https://your.domain)配合反向代理访问时,部分第三方插件会失效。现象包括:设置页的 iframe 指向 127.0.0.1 被浏览器拒绝、管理操作报错、诊断接口返回 403。根本原因在于插件假定浏览器从回环地址访问,并检查 Host/Origin 是否为回环地址。本插件在不修改任何第三方插件文件的前提下,统一处理了这类回环地址问题。

这是什么

dsh-public-origin 是一个 DSH 插件,由用户 JJDonald 维护,采用 MIT 许可证。它的核心价值是让第三方插件在“公网域名 + 反向代理”部署下正常工作,同时通过 DSH 自身的认证机制确保安全。

核心功能

  1. 统一处理反向代理后的回环地址问题:修正浏览器访问时的 iframe 拒绝问题。
  2. 修改 billion-context (bili) 路由:将 /bili/origin 返回当前页面的 origin,并在 /__bili/* 下进行同源反代;修改 bili 管理 API 去除 Origin、Referer 等头,以回环身份访问。
  3. 修改特定插件 Host:将 reasoning-effort 和 skill-explorer 的请求 Host 改写为回环地址。
  4. 区分请求来源:根据 socket 地址(127/8 或 ::1)和 X-Forwarded-* 头,区分本机直连和反向代理请求。
  5. 集成 DSH 认证:通过 DSH 自身的 connection.requestRejection 对反向代理请求进行认证(依赖 --trusted-host、跨站请求标记和 Origin 同源校验)。
  6. 空闲超时:bili 代理请求空闲 5 分钟无活动会中止。
  7. 安全修复:修复 v0.1.0 认证绕过漏洞,不再依赖 Host 头判断,防止通过伪造 Host 头绕过登录。

安装

使用官方安装命令:

dsh plugin --profile web add github:JJDonald/dsh-public-origin

安装后重启 DSH Web 实例。

配置

在 profile 的 cordis.patch.yml 中可以覆盖配置,指定需要处理的路由前缀:

- id: public-origin
  config:
    localize:
      - /dsh-better-reasoning-effort
      - /api/dsh-skill-explorer

bili 的处理是固定启用的,不受此列表影响。

前置要求与部署注意

  1. 环境依赖:依赖 DSH 0.2.0-rc.2+ 和 Node.js >= 22。
  2. DSH 启动参数:DSH 需要使用 --trusted-host <域名> 启动,并且仅监听回环地址(如 --host 127.0.0.1)。
  3. 反向代理配置:
    • 必须设置 X-Forwarded-For 或 X-Real-IP 和 X-Forwarded-Proto。插件靠这些头识别经过反代的请求。
    • 建议将 Host 固定为公网域名($server_name),不要原样转发客户端的 Host。示例配置如下:
location / {
    proxy_pass http://127.0.0.1:3080;
    proxy_http_version 1.1;
    proxy_set_header Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto https;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_buffering off;
}
  1. 安全边界:
    • 本机直连:socket 对端地址属于 127/8 或 ::1,且不带任何 X-Forwarded-* 头的请求,原样交给原插件。
    • 反向代理请求:先经过 DSH 认证,未登录返回 401,不可信返回 403,通过后才改写为回环身份。

兼容性

  • 当前版本:0.2.1。
  • 依赖:DSH 0.2.0-rc.2+,Node.js >= 22。
  • 非官方插件:请自行检查源码与许可证后再安装使用。

总结

dsh-public-origin 解决了 DSH 生态中第三方插件在公网反向代理部署下的兼容性问题。它通过拦截、改写 Host 和 Origin、以及集成 DSH 门禁,在不修改上游插件代码的前提下实现了安全、稳定的回环地址兼容。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye