ScienceDiscovery
English GitHub

网络代理机制

ScienceDiscovery 提供实例级代理注册表和统一代理策略。本页解释策略解析、出站接入与安全边界;具体配置步骤见配置网络代理,接口字段见 REST API 参考。

配置模型

代理记录支持三种来源:

类型 行为 适用场景
custom_url 使用加密保存的 http://、https:// 或 socks5:// URL 企业提供固定代理地址或带凭据 URL
environment 读取服务进程的 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 与 NO_PROXY(含小写形式) 容器、systemd 或启动脚本统一注入代理
system 读取 GNOME gsettings 的手工 HTTP/HTTPS 代理 带桌面配置的 Linux 工作站

模块策略统一使用以下值:

全局默认值只能是 none 或 proxy:<id>,避免形成递归继承。仍被全局默认、模型、Web 或 MCP 引用的代理记录不能删除,必须先修改引用方。

出站接入机制

Node 控制面是 registry、策略和密文的事实源。调用方先通过 SessionStore.resolveProxy(policy) 得到不依赖存储的结果:

type ResolvedProxy =
  | { mode: "direct" }
  | { mode: "environment" }
  | { mode: "url"; url: string };

Node fetch 调用可用 proxyDispatcher(resolved, targetUrl) 获得按目标协议和 NO_PROXY 解析的 undici dispatcher;子进程可用 proxyEnvOverlay(resolved, baseEnv) 生成规范化代理环境覆盖。调用方只能记录 mode 和是否使用代理,不能记录完整 URL。

当前接入路径:

新增出站路径时,应接收 ProxyPolicy,在最靠近请求的位置调用 resolveProxy,然后使用统一 dispatcher/环境覆盖;不要自行读取代理密文或复制策略解析逻辑。随包的 Python MCP server 由 Node 传入已解析的环境覆盖,不读取 Node 数据目录。

迁移、安全与限制