跳到主要内容

为文件配置独立地址访问

说明

在大多数浏览器中,对同一地址的最大并发请求数被限制为6。因此,如果工作表视图包含大量图片文件,用户在点击进入这样的视图时可能会导致浏览器请求排队。在这种情况下,如果用户在浏览器请求未完全加载完时切换到其他页面,可能会遇到浏览速度减慢,甚至浏览器卡顿的问题。

针对上述现象,首先需要确保文件服务实例资源和网络带宽充足。其次,您可以参考本文档,为文件请求配置独立的地址,以防止文件请求阻塞其他接口请求。

单机环境

提示

如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。

系统单访问地址

这里以当前系统访问地址为 http://hap.domain.com,新增文件独立地址 http://file.domain.com 为例

配置步骤

  1. 修改微服务 docker-compose.yaml 配置文件

    version: '3'

    services:
    app:
    image: nocoly/hap-community:5.8.3
    environment:
    ENV_ADDRESS_MAIN: "http://hap.domain.com"
    ENV_APP_VERSION: "5.8.3"
    ENV_API_TOKEN: "******"
    ENV_FILE_DOMAIN: "http://file.domain.com" # 新增变量,指定文件独立地址
    ENV_FILE_ADDRESS_MAIN: "http://file.domain.com" # 新增变量,指定文件独立地址
    ports:
    - 8880:8880
    volumes:
    - ./volume/data/:/data/
    - ../data:/data/hap/data

    sc:
    image: nocoly/hap-sc:3.0.0
    environment:
    <<: *app-environment
    volumes:
    - ./volume/data/:/data/
    ports:
    - 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上

    command:
    image: nocoly/hap-command:node2011-python312
    environment:
    <<: *app-environment

    doc:
    image: nocoly/hap-doc:1.2.0
    environment:
    ENV_FILE_INNER_URI: "sc:9000" # 修改为连接sc服务的文件存储服务端口

    新增变量配置说明:

    • ENV_FILE_DOMAIN:文件存储服务指定文件独立地址
    • ENV_FILE_ADDRESS_MAIN:微服务指定文件独立地址
    • 如果文件独立地址采用 http/https 的默认 80/443 端口,在以上两个变量配置时,不需要指定其默认的 80/443 端口

    新增端口映射说明:

    • - 9000:9000 将容器内的文件服务端口映射到宿主机上,以允许下一步 nginx 代理可以访问到文件服务

    doc 服务变量修改说明:

    • ENV_FILE_INNER_URI,默认变量值修改为 sc:9000
  2. 重启微服务

  3. 为文件独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定后端微服务的IP及映射到微服务宿主机上的文件存储端口
    }

    server {
    listen 80;
    server_name file.domain.com; # 指定文件独立地址
    access_log /data/logs/weblogs/file.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap.domain.com"; # 指定 HAP 系统访问地址
    }
    }
  4. 代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。

系统多访问地址

在系统多访问地址场景下,为文件服务配置独立地址时,需要为每个系统访问地址都配置一个文件独立地址

这里以当前系统主访问地址 hap-external.domain.com,扩展地址 hap-internal.domain.com 为例

为两个访问地址新增两个文件独立访问地址 file-external.domain.comfile-internal.domain.com

系统访问地址与文件独立访问地址对应关系如下:

地址类型主地址扩展地址
系统访问地址hap-external.domain.comhap-internal.domain.com
文件独立地址file-external.domain.comfile-internal.domain.com

配置步骤

  1. 修改微服务 docker-compose.yaml 文件,新增相关配置后并重启微服务

    version: '3'

    services:
    app:
    image: nocoly/hap-community:5.8.3
    environment:
    ENV_ADDRESS_MAIN: "http://hap-external.domain.com"
    ENV_APP_VERSION: "5.8.3"
    ENV_FILE_DOMAIN: "http://file-external.domain.com,http://file-internal.domain.com" # 新增变量,指定文件多个独立地址
    ENV_FILE_ADDRESS_MAIN: "http://file-external.domain.com" # 新增变量,指定文件主独立地址
    ports:
    - 8880:8880
    - 18880:18880
    volumes:
    - ./volume/data/:/data/
    - ../data:/data/hap/data

    sc:
    image: nocoly/hap-sc:3.0.0
    environment:
    <<: *app-environment
    volumes:
    - ./volume/data/:/data/
    ports:
    - 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上

    command:
    image: nocoly/hap-command:node2011-python312
    environment:
    <<: *app-environment

    doc:
    image: nocoly/hap-doc:1.2.0
    environment:
    ENV_FILE_INNER_URI: "sc:9000" # 修改为连接sc服务的文件存储服务端口

    新增变量配置说明:

    • ENV_FILE_DOMAIN 为文件存储服务指定多个文件独立地址
    • ENV_FILE_ADDRESS_MAIN 为微服务指定文件主独立地址
    • 如果文件独立地址采用 http/https 的默认 80/443 端口,在以上两个变量配置时,不需要指定其默认的 80/443 端口

    新增端口映射说明:

    • - 9000:9000 将容器内的文件服务端口映射到宿主机上,以允许下一步 nginx 代理可以访问到文件服务

    doc 服务变量修改说明:

    • ENV_FILE_INNER_URI,默认变量值修改为 sc:9000
  2. 重启微服务

  3. 文件主独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定后端微服务的IP及映射到微服务宿主机上的文件存储端口
    }

    server {
    listen 80;
    server_name file-external.domain.com; # 指定文件主独立地址
    access_log /data/logs/weblogs/file-external.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file-external.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap-external.domain.com"; # 指定 HAP 系统主访问地址
    }
    }
  4. 文件扩展独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定后端微服务的IP及映射到微服务宿主机上的文件存储端口
    }

    server {
    listen 80;
    server_name file-internal.domain.com; # 指定文件扩展独立地址
    access_log /data/logs/weblogs/file-internal.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file-internal.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap-internal.domain.com"; # HAP 系统扩展访问地址
    }
    }
  5. 修改系统扩展地址的代理,在 location /location ~ /mds2 下分别增加请求头 pdfileaddr 字段指定文件扩展独立地址,如下所示

    ......

    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_set_header pdaddr http://hap-internal.domain.com;
    proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址
    proxy_pass http://hap-ext;
    }

    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-ext;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header pdaddr http://hap-internal.domain.com;
    proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址
    }

    ......
  6. 代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。

集群环境

提示

如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。

系统单访问地址

这里以当前系统访问地址为 http://hap.domain.com,新增文件独立地址 http://file.domain.com 为例

配置步骤

  1. 修改微服务相关 yaml 配置文件

    1. 修改微服务 config.yaml,新增环境变量 ENV_FILE_ADDRESS_MAIN 为微服务指定文件独立地址

      ENV_FILE_ADDRESS_MAIN: "http://file.domain.com"
    2. 修改微服务 service.yaml,找到 doc 服务的 ENV_FILE_INNER_URI 变量,将变量值修改为文件存储的内网地址

      env:
      - name: ENV_FILE_INNER_URI
      value: "192.168.0.10:9000" # 修改为文件存储的内网地址
    3. 重启微服务

  2. 修改文件存储服务 file.yaml 配置文件,新增相关配置后并重启文件存储服务

    1. 修改文件存储服务 file.yaml 配置文件,新增环境变量 ENV_FILE_DOMAIN 为文件存储服务指定文件独立地址

      ENV_FILE_DOMAIN: "http://file.domain.com"
    2. 重启文件存储服务

  3. 为文件独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定文件存储服务的IP与端口
    }

    server {
    listen 80;
    server_name file.domain.com; # 指定文件独立地址
    access_log /data/logs/weblogs/file.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap.domain.com"; # 指定 HAP 系统访问地址
    }
    }
  4. 代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。

系统多访问地址

在系统多访问地址场景下,为文件服务配置独立地址时,需要为每个系统访问地址都配置一个文件独立地址

这里以当前系统主访问地址 hap-external.domain.com,扩展地址 hap-internal.domain.com 为例

为两个访问地址新增两个文件独立访问地址 file-external.domain.comfile-internal.domain.com

系统访问地址与文件独立访问地址对应关系如下:

地址类型主地址扩展地址
系统访问地址hap-external.domain.comhap-internal.domain.com
文件独立地址file-external.domain.comfile-internal.domain.com

配置步骤

  1. 修改微服务相关 yaml 配置文件

    1. 修改微服务 config.yaml,新增环境变量 ENV_FILE_ADDRESS_MAIN 为微服务指定文件主独立地址

      ENV_FILE_ADDRESS_MAIN: "http://file-external.domain.com"
    2. 修改微服务 service.yaml,找到 doc 服务的 ENV_FILE_INNER_URI 变量,将变量值修改为文件存储的内网地址

      env:
      - name: ENV_FILE_INNER_URI
      value: "192.168.0.10:9000" # 修改为文件存储的内网地址
    3. 重启微服务

  2. 修改文件存储服务 file.yaml 配置文件,新增相关配置后并重启文件存储服务

    1. 修改文件存储服务 file.yaml 配置文件,新增环境变量 ENV_FILE_DOMAIN 为文件存储服务指定多个文件独立地址

      ENV_FILE_DOMAIN: "http://file-external.domain.com,http://file-internal.domain.com"
    2. 重启文件存储服务

  3. 文件主独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定文件存储服务的IP与端口
    }

    server {
    listen 80;
    server_name file-external.domain.com; # 指定文件主独立地址
    access_log /data/logs/weblogs/file-external.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file-external.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap-external.domain.com"; # 指定 HAP 系统主访问地址
    }
    }
  4. 文件扩展独立地址新增 nginx 跨域代理配置,代理配置文件可参考下方配置

    upstream file {
    server 192.168.0.10:9000; # 指定文件存储服务的IP与端口
    }

    server {
    listen 80;
    server_name file-internal.domain.com; # 指定文件扩展独立地址
    access_log /data/logs/weblogs/file-internal.domain.com.log main; # 日志路径,可自定义
    error_log /data/logs/weblogs/file-internal.domain.com.error.log; # 日志路径,可自定义

    location / {
    if ($request_method = OPTIONS) {
    return 204 "";
    }
    proxy_set_header HOST $http_host;
    proxy_pass http://file;
    proxy_hide_header Access-Control-Allow-Origin;
    add_header Access-Control-Allow-Headers authorization,content-type;
    add_header Access-Control-Allow-Origin "http://hap-internal.domain.com"; # HAP 系统扩展访问地址
    }
    }
  5. 修改系统扩展地址的代理,在 location /location ~ /mds2 下分别增加请求头 pdfileaddr 字段指定文件扩展独立地址,如下所示

    ......

    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_set_header pdaddr http://hap-internal.domain.com;
    proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址
    proxy_pass http://hap-ext;
    }

    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-ext;
    proxy_redirect off;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection upgrade;
    proxy_set_header pdaddr http://hap-internal.domain.com;
    proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址
    }

    ......
  6. 代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。