修复中控

This commit is contained in:
dekun
2026-05-25 13:47:34 +08:00
parent 1347441bb3
commit 9556c4673d
4 changed files with 26 additions and 3 deletions
+4 -1
View File
@@ -20,9 +20,12 @@ HUB_PORT=5100
# 留空 = 不强制关闭;仅不想用 OKX 时可设 HUB_DISABLED_IDS=1
HUB_DISABLED_IDS=
# true=允许 RFC1918 私网访问中控页面;false=仅 127.0.0.1
# true=允许 RFC1918 私网访问中控页面;false=仅 127.0.0.1(反代须指向 127.0.0.1:5100
HUB_TRUST_LAN=true
# 云服务器用域名/HTTPS 反代访问中控时设为 true(否则公网可能看到 {"detail":"forbidden"}
# HUB_ALLOW_PUBLIC=true
# 中控 Web 登录(密码非空即启用;反代到公网时务必设置用户名+密码)
# HUB_USERNAME=admin
# HUB_PASSWORD=your-strong-password-here
+7 -1
View File
@@ -58,6 +58,9 @@ HUB_PORT = int(os.getenv("HUB_PORT", "5100"))
HUB_BRIDGE_TOKEN = (os.getenv("HUB_BRIDGE_TOKEN") or os.getenv("CONTROL_TOKEN") or "").strip()
_trust_raw = (os.getenv("HUB_TRUST_LAN", "true") or "").strip().lower()
HUB_TRUST_LAN = _trust_raw not in ("0", "false", "no", "off")
_allow_pub_raw = (os.getenv("HUB_ALLOW_PUBLIC") or "").strip().lower()
# 云服务器 + 域名反代时设为 true:不做 IP 限制,仅靠 HUB_PASSWORD / 登录页保护
HUB_ALLOW_PUBLIC = _allow_pub_raw in ("1", "true", "yes", "on")
DIR = Path(__file__).resolve().parent
HUB_BUILD = "20260525-hub-sso"
HUB_AGENT_TIMEOUT = float(os.getenv("HUB_AGENT_TIMEOUT", "8"))
@@ -130,7 +133,10 @@ if STATIC_DIR.is_dir():
@app.middleware("http")
async def local_only(request: Request, call_next):
if request.client and not _client_allowed(request.client.host):
if HUB_ALLOW_PUBLIC:
return await call_next(request)
peer = request.client.host if request.client else None
if not _client_allowed(peer):
return JSONResponse({"detail": "forbidden"}, status_code=403)
return await call_next(request)
@@ -121,7 +121,10 @@ HUB_SESSION_SECRET=另一串随机字符
# 中控为 HTTPS 时建议 true
HUB_COOKIE_SECURE=true
# 仅本机访问中控进程时可 true;公网反代访问建议 false
# 公网用域名访问中控(宝塔反代)时必设其一:
# HUB_ALLOW_PUBLIC=true (推荐:反代 + 中控密码)
# 或反代目标必须是 http://127.0.0.1:5100 且可保持 HUB_TRUST_LAN=false
HUB_ALLOW_PUBLIC=true
HUB_TRUST_LAN=false
# 从中控打开实例的 SSO 链接有效期(秒),默认 7200 = 2 小时
+11
View File
@@ -238,6 +238,17 @@ HUB_PUBLIC_ORIGIN=http://192.168.8.6
`HUB_TRUST_LAN=true` 时仅允许本机 + RFC1918 私网(10/172.16/192.168)。公网 IP 直连 5100 会被拒;应走 **Nginx 反代到 127.0.0.1:5100**
### 4.4 浏览器显示 `{"detail":"forbidden"}`
**原因**:中控 `local_only` 中间件认为访问来源 IP 不允许(常见于云上 `HUB_TRUST_LAN=false` 且反代未指向 `127.0.0.1:5100`)。
**处理**(二选一):
1. `manual_trading_hub/.env` 增加 **`HUB_ALLOW_PUBLIC=true`**(已设 `HUB_PASSWORD` 时推荐),`pm2 restart manual-trading-hub`
2. 宝塔反代目标改为 **`http://127.0.0.1:5100`**(不要用公网 IP:5100 作 upstream)。
改后强刷浏览器再开 `/login`
### 6.3 `.env` 修改不生效
PM2 须重启:`pm2 restart manual-trading-hub``run_hub.sh` 每次启动会重读 `.env`)。