为文件配置独立地址访问
在大多数浏览器中,对同一地址的最大并发请求数被限制为6。因此,如果工作表视图包含大量图片文件,用户在点击进入这样的视图时可能会导致浏览器请求排队。在这种情况下,如果用户在浏览器请求未完全加载完时切换到其他页面,可能会遇到浏览速度减慢,甚至浏览器卡顿的问题。
针对上述现象,首先需要确保文件服务实例资源和网络带宽充足。其次,您可以参考本文档,为文件请求配置独立的地址,以防止文件请求阻塞其他接口请求。
单机环境
如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。
系统单访问地址
这里以当前系统访问地址为 http://example.domain.com,新增文件独立地址 http://file.domain.com 为例
配置步骤
-
修改微服务
docker-compose.yaml配置文件version: '3'services:core:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-core:7.4.2environment: &app-environmentENV_ADDRESS_MAIN: "http://example.domain.com"ENV_APP_VERSION: "7.4.2"ENV_API_TOKEN: "******"ENV_FILE_DOMAIN: "http://file.domain.com" # 新增变量,指定文件独立地址ENV_FILE_ADDRESS_MAIN: "http://file.domain.com" # 新增变量,指定文件独立地址ENV_HAP_INTRANET_FILE_ENDPOINT: "core:8880/file" # 新增变量,固定值ports:- 8880:8880volumes:- ./volume/data/:/data/- ../data:/data/mingdao/datasc:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc:3.2.0environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上command:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-command:node1018-python36doc:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-doc:2.0.0新增变量配置说明:
ENV_FILE_DOMAIN:文件存储服务指定文件独立地址ENV_FILE_ADDRESS_MAIN:微服务指定文件独立地址ENV_HAP_INTRANET_FILE_ENDPOINT固定值 "core:8880/file"- 如果文件独立地址采用 http/https 的默认 80/443 端口,在以上两个变量配置时,不需要指定其默认的 80/443 端口
新增端口映射说明:
- 9000:9000将容器内的文件服务端口映射到宿主机上,以允许下一步 nginx 代理可以访问到文件服务
doc 服务变量修改说明:
ENV_FILE_INNER_URI,默认变量值修改为sc:9000
-
重启微服务
-
为文件独立地址新增 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://example.domain.com"; # 指定 HDP 系统访问地址}} -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发 者工具,在 Network 中看到文件相关的请求是否已经走独立地址。
系统多访问地址
在系统多访问地址场景下,为文件服务配置独立地址时,需要为每个系统访问地址都配置一个文件独立地址
这里以当前系统主访问地址 example-external.domain.com,扩展地址 example-internal.domain.com 为例
为两个访问地址新增两个文件独立访问地址 file-external.domain.com, file-internal.domain.com
系统访问地址与文件独立访问地址对应关系如下:
| 地址类型 | 主地址 | 扩展地址 |
|---|---|---|
| 系统访问地址 | example-external.domain.com | example-internal.domain.com |
| 文件独立地址 | file-external.domain.com | file-internal.domain.com |
配置步骤
-
修改微服务
docker-compose.yaml文件,新增相关配置后并重启微服务version: '3'services:core:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-core:7.4.2environment:ENV_ADDRESS_MAIN: "http://example-external.domain.com"ENV_APP_VERSION: "7.4.2"ENV_FILE_DOMAIN: "http://file-external.domain.com,http://file-internal.domain.com" # 新增变量,指定文件多个独立地址ENV_FILE_ADDRESS_MAIN: "http://file-external.domain.com" # 新增变量,指定文件主独立地址ENV_HAP_INTRANET_FILE_ENDPOINT: "core:8880/file" # 新增变量,固定值ports:- 8880:8880- 18880:18880volumes:- ./volume/data/:/data/- ../data:/data/mingdao/datasc:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc:3.2.0environment:<<: *app-environmentvolumes:- ./volume/data/:/data/ports:- 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上command:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-command:node1018-python36doc:image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-doc:2.0.0新增变量配置说明:
ENV_FILE_DOMAIN为文件存储服务指定多个文件独立地址ENV_FILE_ADDRESS_MAIN为微服务指定文件主独立地址ENV_HAP_INTRANET_FILE_ENDPOINT固定值 "core:8880/file"- 如果文件独立地址采用 http/https 的默认 80/443 端口,在以上两个变量配置时,不需要指定其默认的 80/443 端口
新增端口映射说明:
- 9000:9000将容器内的文件服务端口映射到宿主机上,以允许下一步 nginx 代理可以访问到文件服务
doc 服务变量修改说明:
ENV_FILE_INNER_URI,默认变量值修改为sc:9000
-
重启微服务
-
为文件主独立地址新增 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://example-external.domain.com"; # 指定 HDP 系统主访问地址}} -
为文件扩展独立地址新增 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://example-internal.domain.com"; # HDP 系统扩展访问地址}} -
修改系统扩展地址的代理,在
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://example-internal.domain.com;proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址proxy_pass http://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://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://example-internal.domain.com;proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址}location ~ ^/(agent|api/workflow/api/sse/chat) {set $md_real_ip '';if ($http_x_real_ip) {set $md_real_ip $http_x_real_ip;}if ($http_x_real_ip = '') {set $md_real_ip $remote_addr;}proxy_buffering off;proxy_read_timeout 30m;proxy_send_timeout 30m;client_max_body_size 16m;proxy_set_header Host $host;proxy_set_header X-Real-IP $md_real_ip;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-HTTP-Method-Override "";proxy_set_header pdaddr http://example-internal.domain.com;proxy_set_header pdfileaddr http://file-internal.domain.com; # 新增请求头 pdfileaddr,指定文件扩展独立地址proxy_pass http://ext;proxy_redirect default;}...... -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。
集群环境
如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。