反向代理与自定义域名
Avibe 的 Web UI 跑在你自己的机器上,默认监听127.0.0.1:5123。从别处访问它最简单的方式是 avibe.bot 隧道。如果你想自己承载 —— 比如用 nginx 挂在你自己的域名上 —— Avibe 需要知道它可以信任你的代理转发过来的 host。
为什么裸反向代理会被挡下
Avibe 会校验每个请求的 origin 是否与它实际被访问的地址一致。正是这道校验挡住了恶意页面伪造请求打到你本地的控制台。 自 PR #781 起,Avibe 默认不再信任X-Forwarded-Host 头。除非请求来自你显式登记过的代理,否则 Avibe 会忽略转发来的 host,改用它看到的直连连接来算 origin —— 例如 http://127.0.0.1:5123。
于是,如果 nginx 对外提供 https://avibe.example.com,但代理没被登记:浏览器发来的是 avibe.example.com,而 Avibe 仍以为自己是 127.0.0.1。两者不一致,请求被拒:
- 状态变更类操作返回
403(invalid origin); - 视你的 avibe.bot 远程访问配置而定,页面本身的加载可能返回
503(host 不匹配)。
让它跑起来
需要做两件事:把代理的 IP 登记为可信,并转发正确的头。1. 把代理登记为可信
把VIBE_UI_TRUSTED_PROXY_IPS 设为 Avibe 看到你的代理从哪个地址连进来 —— 是直连的对端,不是浏览器:
- nginx 与 Avibe 同机,反代到 Avibe 的回环监听 →
127.0.0.1 - nginx 在另一台主机或容器 → 它的真实 IP,或一个 CIDR 段
vibe 服务的环境里 —— 你的 shell 配置、服务管理器单元,或容器环境 —— 然后重启 Avibe。当该值为空(默认),不信任任何代理,转发来的 host 一律被忽略。
后续版本可能会允许你在 Web UI 设置里配置可信代理,而不必用环境变量。在那之前,请使用
VIBE_UI_TRUSTED_PROXY_IPS。2. 在 nginx 侧转发这些头
可信代理必须把浏览器的 host 与 scheme 透传过来,否则 Avibe 无从可信:proxy_set_header X-Forwarded-Port $server_port;。
完整 nginx 示例
验证
重启 Avibe,然后在你的自定义域名上打开 Web UI 并登录。如果仍然遇到403 invalid origin 或 503 host 不匹配:
- 确认浏览器地址与 nginx 转发的 host(
$host)一致; - 确认代理的真实来源 IP 就是你登记的那个 —— 格式不合法的值会被跳过,并在 Avibe 日志里留下
Ignoring invalid VIBE_UI_TRUSTED_PROXY_IPS entry警告; - 确认你在设置变量之后重启了 Avibe。
从 PR #781 之前的版本升级
对于把 Avibe 挂在自定义域名反向代理后面的自建部署,这是一个破坏性变更。PR #781 之前,Avibe 会接受任何来源的X-Forwarded-Host;之后,除非代理被登记,转发来的 host 一律被忽略 —— 所以升级会让原本能用的自定义域名变成 403/503,直到你完成迁移。
迁移步骤:
- 把
VIBE_UI_TRUSTED_PROXY_IPS设为你的代理 IP(见上),并注意回环/隧道那条警告。 - 确保 nginx 转发了
Host、X-Forwarded-Host和X-Forwarded-Proto。 - 重启 Avibe。
vibe remote)不受影响、无需改动 —— 它校验的是自己那套对外 origin,并不依赖 X-Forwarded-Host。