AiHummer
中文
登录帐户
v1.2.x
{ }Swagger

出站代理

v1.2.x · 已更新 2026-08-17

部分模型无法从俄罗斯境内的服务器直接访问。为了不让这件事变成每一位运维人员都要自己动手完成的配置, AiHummer 在安装时下发出站代理的地址,并且自行决定每个请求究竟走哪一条路。

两句话讲清楚

代理地址由厂商下发,落到服务器上的一个私有文件里 —— 它不保存在 gateway.env 中, 也不会进入日志。如果代理未设置或不可达,请求就走 直连:实例继续工作,而不是停摆。

什么走哪条路

去向 怎么走
外部模型(境外提供方) 走代理,前提是它已配置且可用
代理不可达时的同一模型 直连,并在日志中留下一条警告
localhost*.localhost、实例自身的内部地址 始终直连,绕过代理

表格的最后一行很重要:实例访问自身时永远不会被裹进代理,否则本地调用就会依赖外部通道。

兜底路径:没有代理不等于拒绝

在 1.2.8 版本之前,未设置或不工作的代理意味着请求出错。现在的行为不同:

  • 代理已配置且可用 → 请求经由它发出;
  • 代理 未配置 → 请求直接发出,日志中会写入一次警告,原因为“未配置”;
  • 代理已配置,但 取值不可用 → 请求直接发出,警告中的原因是“配置不可用”。

警告 每次启动只输出一次,而不是每个请求都输出:否则它会淹没日志,也就没人再读了。

:::note 直连是兜底方案,而不是代理的替代品。如果提供方不接受来自俄罗斯地址的请求,直连请求同样 到不了它那里 —— 但这次拒绝的是提供方,响应里看到的正是这一点,而不是笼统的“无法应用配置”。 :::

地址存放在哪里

取值存放在一个 私有文件 中,其路径由 AIHUMMER_OUTBOUND_PROXY_URL_FILE 指定。 对该文件的要求:

  • 绝对路径;
  • 普通文件,权限 不宽于 0600
  • 大小不超过 4096 字节。

这样做是有意为之:代理地址中含有口令,因此它不应放在 gateway.env 里 —— 后者在日常维护中会被读取和复制。

:::caution 把地址“直接写在取值里”的 AIHUMMER_OUTBOUND_PROXY_URL 变量只为开发构建而存在。 发布构建不会读取它 —— 生产环境中只接受指向文件的路径。 :::

接受哪些地址

无论是在下发配置的时刻,还是在使用配置的时刻,校验都是同一套,因此不可用的取值会被 立即拒绝,而不会在日后变成日志里一行都没有的“境外模型又不工作了”。

接受的形式:httphttps 方案、非空主机、无查询串、无片段、无路径(/ 除外)。

🔴 非本机主机上的裸 http 是被有意拒绝的。 在未加密的 http 上, Proxy-Authorization 头会在每次连接时以明文发送 —— 也就是说代理口令会持续泄露。 对非本机主机请使用 https

如何查看正在发生什么

# What is configured right now (the value is never printed — only whether it is set)
aihummer doctor

# Gateway log: the direct-route warning when the proxy was not applied
journalctl -u aihummer-gateway -n 200 | grep -i proxy

拒绝应用配置时会说明 原因 ——“未配置”“配置不可用”—— 而不是笼统的“无法应用”。 这正是把“地址没送到”和“地址送到了,但不正确”区分开来的地方。

运维人员该做什么

通常什么都不用做:地址在安装时下发。需要介入的只有两种情况。

  1. 用自己的代理替代厂商的。 把地址放进一个权限为 0600 的私有文件,并在 AIHUMMER_OUTBOUND_PROXY_URL_FILE 中指出该路径,然后重启网关。
  2. 完全不需要代理(实例所在的位置可以直接访问模型)。什么都不用指定: 未设置的代理就意味着直连请求。