为 HAP 系统配置多个访问地址
背景说明
在实际应用中,您可能需要通过多个域名或地址(例如 hap.example.com 和 new.example.com)来访问同一个 HAP 系统。
然而,由于 HAP 系统内部的路由和安全机制,直接将新的访问地址反向代理到主地址,会导致会话(Session)验证失败、页面资源加载异常等问题。
本文档将指导您如何通过正确配置,实现多地址安全、稳定地访问 HAP 系统。
核心原理
要让 HAP 系统正确处理来自多个源地址的请求,关键在于让后端服务能够识别每一个请求的“真实来源”。这需要三项配置协同工作:
-
统一代理目标:所有扩展地址的请求,都应通过反向代理(如 Nginx)转发至 HAP 容器内部一个专用的端口 18880。
-
声明来源地址 (pdaddr):在反向代理配置中,必须添加一个名为 pdaddr 的 HTTP 请求头。它的值是客户端实际请求的完整地址,用于明确告知 HAP 后端。
-
地址白名单:必须将所有扩展访问地址添加到一个白名单环境变量
ENV_ADDRESS_ALLOWLIST
中,以便系统校验其合法性。
通过以上配置,系统即可正确识别并处理来自不同地址的请求,动态生成正确的资源 URL,确保功能正常。
配置步骤
-
在
docker-compose.yaml
中 app 服务ports
下新增端口映射,将容器内的 18880 端口映射出- 18880:18880
-
在 app 服务
environment
下新增环境变量,环境变量值为你的扩展访问地址,多个地址请用英文逗号分割ENV_ADDRESS_ALLOWLIST: "https://hap2.domain.com"
-
在安装管理器目录下重启 HAP 服务生效
bash ./service.sh restartall
-
配置 nginx 文件,将新的访问地址,反向代理至 HAP 微服务的 18880 端口
nginx 反向代理配置文件 参考:
-
在 nginx 配置文件
localtion
下增加proxy_set_header pdaddr
指定访问系统访问地址如:
location / {
set $real_ip '';
if ($http_x_real_ip) {
set $real_ip $http_x_real_ip;
}
if ($http_x_real_ip = '') {
set $real_ip $remote_addr;
}
proxy_set_header X-Real-IP $real_ip;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://hap;
proxy_set_header pdaddr https://hap2.domain.com; # 新增,注意修改为你实际的扩展访问地址
}
location ~ /mds2 {
proxy_set_header Host $http_host;
proxy_hide_header X-Powered-By;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://hap;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header pdaddr https://hap2.domain.com; # 新增,注意修改为你实际的扩展访问地址
} -
重载 nginx 后通过新的访问地址即可正常使用 HAP 系统