跳到主要内容

为 HAP 系统配置多个访问地址

背景说明

在实际应用中,您可能需要通过多个域名或地址(例如 hap.example.com 和 new.example.com)来访问同一个 HAP 系统。

然而,由于 HAP 系统内部的路由和安全机制,直接将新的访问地址反向代理到主地址,会导致会话(Session)验证失败、页面资源加载异常等问题。

本文档将指导您如何通过正确配置,实现多地址安全、稳定地访问 HAP 系统。

核心原理

要让 HAP 系统正确处理来自多个源地址的请求,关键在于让后端服务能够识别每一个请求的“真实来源”。这需要三项配置协同工作:

  1. 统一代理目标:所有扩展地址的请求,都应通过反向代理(如 Nginx)转发至 HAP 容器内部一个专用的端口 18880。

  2. 声明来源地址 (pdaddr):在反向代理配置中,必须添加一个名为 pdaddr 的 HTTP 请求头。它的值是客户端实际请求的完整地址,用于明确告知 HAP 后端。

  3. 地址白名单:必须将所有扩展访问地址添加到一个白名单环境变量 ENV_ADDRESS_ALLOWLIST 中,以便系统校验其合法性。

通过以上配置,系统即可正确识别并处理来自不同地址的请求,动态生成正确的资源 URL,确保功能正常。

配置步骤

  1. docker-compose.yaml 中 app 服务 ports 下新增端口映射,将容器内的 18880 端口映射出

    - 18880:18880
  2. 在 app 服务 environment 下新增环境变量,环境变量值为你的扩展访问地址,多个地址请用英文逗号分割

    ENV_ADDRESS_ALLOWLIST: "https://hap2.domain.com"
  3. 在安装管理器目录下重启 HAP 服务生效

    bash ./service.sh restartall
  4. 配置 nginx 文件,将新的访问地址,反向代理至 HAP 微服务的 18880 端口

    nginx 反向代理配置文件参考:

  5. 在 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; # 新增,注意修改为你实际的扩展访问地址
    }
  6. 重载 nginx 后通过新的访问地址即可正常使用 HAP 系统