为文件配置独立地址访问
在大多数浏览器中,对同一地址的最大并发请求数被限制为6。因此,如果工作表视图包含大量图片文件,用户在点击进入这样的视图时可能会导致浏览器请求排队。在这种情况下,如果用户在浏览器请求未完全加载完时切换到其他页面,可能会遇到浏览速度减慢,甚至浏览器卡顿的问题。
针对上述现象,首先需要确保文件服务实例资源和网络带宽充足。其次,您可以参考本文档,为文件请求配置独立的地址,以防止文件请求阻塞其他接口请求。
单机环境
如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。
系统单访问地址
这里以当前系统访问地址为 http://hap.domain.com
,新增文件独立地址 http://file.domain.com
为例
配置步骤
-
修改微服务
docker-compose.yaml
配置文件version: '3'
services:
app:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-community:5.7.0
environment:
ENV_ADDRESS_MAIN: "http://hap.domain.com"
ENV_APP_VERSION: "5.7.0"
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/mingdao/data
sc:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc:3.0.0
environment:
<<: *app-environment
volumes:
- ./volume/data/:/data/
ports:
- 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上
command:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-command:node1018-python36
environment:
<<: *app-environment
doc:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-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
-
重启微服务
-
为文件独立地址新增 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 系统访问地址
}
} -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。
系统多访问地址
在系统多访问地址场景下,为文件服务配置独立地址时,需要为每个系统访问地址都配置一个文件独立地址
这里以当前系统主访问地址 hap-external.domain.com
,扩展地址 hap-internal.domain.com
为例
为两个访问地址新增两个文件独立访问地址 file-external.domain.com
, file-internal.domain.com
系统访问地址与文件独立访问地址对应关系如下:
地址类型 | 主地址 | 扩展地址 |
---|---|---|
系统访问地址 | hap-external.domain.com | hap-internal.domain.com |
文件独立地址 | file-external.domain.com | file-internal.domain.com |
配置步骤
-
修改微服务
docker-compose.yaml
文件,新增相关配置后并重启微服务version: '3'
services:
app:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-community:5.7.0
environment:
ENV_ADDRESS_MAIN: "http://hap-external.domain.com"
ENV_APP_VERSION: "5.7.0"
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/mingdao/data
sc:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc:3.0.0
environment:
<<: *app-environment
volumes:
- ./volume/data/:/data/
ports:
- 9000:9000 # 新增端口映射,将容器内的 9000 端口映射到宿主机上
command:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-command:node1018-python36
environment:
<<: *app-environment
doc:
image: registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-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
-
重启微服务
-
为文件主独立地址新增 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 系统主访问地址
}
} -
为文件扩展独立地址新增 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 系统扩展访问地址
}
} -
修改系统扩展地址的代理,在
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,指定文件扩展独立地址
}
...... -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。
集群环境
如果文件存储独立地址采用 http/https 的默认 80/443 端口,在相关环境变量配置时,不需要指定其地址中默认的 80/443 端口。
系统单访问地址
这里以当前系统访问地址为 http://hap.domain.com
,新增文件独立地址 http://file.domain.com
为例
配置步骤
-
修改微服务相关 yaml 配置文件
- Kubernetes
- Docker Compose
-
修改微服务
config.yaml
,新增环境变量ENV_FILE_ADDRESS_MAIN
为微服务指定文件独立地址ENV_FILE_ADDRESS_MAIN: "http://file.domain.com"
-
修改微服务
service.yaml
,找到 doc 服务的ENV_FILE_INNER_URI
变量,将变量值修改为文件存储的内网地址env:
- name: ENV_FILE_INNER_URI
value: "192.168.0.10:9000" # 修改为文件存储的内网地址 -
重启微服务
-
修改各个微服务
docker-compose.yaml
,新增环境变量ENV_FILE_ADDRESS_MAIN
为微服务指定文件独立地址ENV_FILE_ADDRESS_MAIN: "http://file.domain.com"
-
重启各微服务节点
-
修改各个 doc 预览服务的配置文件,将
ENV_FILE_INNER_URI
变量值修改为文件存储的内网地址ENV_FILE_INNER_URI: "192.168.0.10:9000" # 修改为文件存储的内网地址
-
重启各 doc 预览服务
-
修改文件存储服务
file.yaml
配置文件,新增相关配置后并重启文件存储服务-
修改文件存储服务
file.yaml
配置文件,新增环境变量ENV_FILE_DOMAIN
为文件存储服务指定文件独立地址ENV_FILE_DOMAIN: "http://file.domain.com"
-
重启文件存储服务
-
-
为文件独立地址新增 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 系统访问地址
}
} -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。
系统多访问地址
在系统多访问地址场景下,为文件服务配置独立地址时,需要为每个系统访问地址都配置一个文件独立地址
这里以当前系统主访问地址 hap-external.domain.com
,扩展地址 hap-internal.domain.com
为例
为两个访问地址新增两个文件独立访问地址 file-external.domain.com
, file-internal.domain.com
系统访问地址与文件独立访问地址对应关系如下:
地址类型 | 主地址 | 扩展地址 |
---|---|---|
系统访问地址 | hap-external.domain.com | hap-internal.domain.com |
文件独立地址 | file-external.domain.com | file-internal.domain.com |
配置步骤
-
修改微服务相关 yaml 配置文件
- Kubernetes
- Docker Compose
-
修改微服务
config.yaml
,新增环境变量ENV_FILE_ADDRESS_MAIN
为微服务指定文件主独立地址ENV_FILE_ADDRESS_MAIN: "http://file-external.domain.com"
-
修改微服务
service.yaml
,找到 doc 服务的ENV_FILE_INNER_URI
变量,将变量值修改为文件存储的内网地址env:
- name: ENV_FILE_INNER_URI
value: "192.168.0.10:9000" # 修改为文件存储的内网地址 -
重启微服务
-
修改各个微服务
docker-compose.yaml
,新增环境变量ENV_FILE_ADDRESS_MAIN
为微服务指定文件主独立地址ENV_FILE_ADDRESS_MAIN: "http://file-external.domain.com"
-
重启各微服务节点
-
修改各个 doc 预览服务的配置文件,将
ENV_FILE_INNER_URI
变量值修改为文件存储的内网地址ENV_FILE_INNER_URI: "192.168.0.10:9000" # 修改为文件存储的内网地址
-
重启各 doc 预览服务
-
修改文件存储服务
file.yaml
配置文件,新增相关配置后并重启文件存储服务-
修改文件存储服务
file.yaml
配置文件,新增环境变量ENV_FILE_DOMAIN
为文件存储服务指定多个文件独立地址ENV_FILE_DOMAIN: "http://file-external.domain.com,http://file-internal.domain.com"
-
重启文件存储服务
-
-
为文件主独立地址新增 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 系统主访问地址
}
} -
为文件扩展独立地址新增 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 系统扩展访问地址
}
} -
修改系统扩展地址的代理,在
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,指定文件扩展独立地址
}
...... -
代理配置完成后,清理浏览器缓存。随后可通过浏览器开发者工具,在 Network 中看到文件相关的请求是否已经走独立地址。