背景
Hermes Dashboard 默认绑定 127.0.0.1:9119,仅限本机访问。通过反向代理(nginx)使用公网域名访问时,会遇到 Host 头校验、CORS 跨域、WebSocket 连接拒绝三个核心问题。本文档记录了完整的源码修改方案和部署步骤。
一、源码修改清单
所有修改均在文件:/usr/local/lib/hermes-agent/hermes_cli/web_server.py
修改 1:添加 import re(第 18 行)
# 在现有 import os 下方添加
import re
修改 2:CORS 跨域配置动态化(第 90-105 行)
原代码:只允许 localhost 和 127.0.0.1 的跨域请求。
修改后:从 HERMES_DASHBOARD_EXTRA_HOSTS 环境变量动态读取允许的域名。
# Build CORS origin regex from HERMES_DASHBOARD_EXTRA_HOSTS (comma-separated
# domain names) so the dashboard works behind a reverse proxy without
# hardcoding domains. Always allow localhost / 127.0.0.1 for local access.
_cors_extra = os.environ.get("HERMES_DASHBOARD_EXTRA_HOSTS", "")
_cors_patterns = [r"^https?://(localhost|127\.0\.0\.1)(:\d+)?"]
for _h in _cors_extra.split(","):
_h = _h.strip()
if _h:
_cors_patterns.append(
r"^https?://([a-z0-9-]+\.)*" + re.escape(_h) + r"(:\d+)?"
)
_cors_regex = "|".join(f"({
p})" for p in _cors_patterns) if _cors_patterns else r"^https?://(localhost|127\.0\.0\.1)(:\d+)?$"
app.add_middleware(
CORSMiddleware,
allow_origin_regex=_cors_regex,
allow_methods=["*"],
allow_headers=["*"],
)
修改 3:Host 头校验支持环境变量(第 182-188 行)
在 _is_accepted_host 函数中添加环境变量检查:
# Check HERMES_DASHBOARD_EXTRA_HOSTS env var for reverse-proxy setups.
# Comma-separated list of additional hostnames to accept (e.g. behind
# nginx/Caddy with a public domain pointing at the dashboard).
_extra = os.environ.get("HERMES_DASHBOARD_EXTRA_HOSTS",<
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/hzether/article/details/160727854



