# 使用Nginx统一管理多集群的Kibana和Dashboards
使用反向代理服务器统一管理Kibana和OpenSearch Dashboards地址，简化多集群管理流程，实现细粒度的访问控制。
#### 应用场景
在使用Kibana/OpenSearch Dashboards进行数据可视化和日志分析时，如果您的业务架构中存在多个Elasticsearch和OpenSearch集群，并希望通过一个统一的反向代理（如Nginx）统一管理集群访问，可能会遇到需要根据不同的基础路径（Base Path）区分集群的需求。例如，您可能希望将不同业务线的数据展示在不同的集群上，但又希望通过一个统一入口访问Kibana/OpenSearch Dashboards。此时，需为每个集群的Kibana/OpenSearch Dashboards配置不同的Base Path。然而，当前的配置方式需手动在每个节点上进行，不仅增加了运维复杂度，也容易出错。为解决这一问题，CSS服务提供了集中化配置管理功能：用户只需在控制台输入所需的Base Path，系统将自动在所有相关节点上同步配置，确保配置的一致性和准确性，从而简化多集群管理流程，提升系统安全性和管理效率。
本文主要介绍如何使用Nginx统一管理多个Elasticsearch集群的Kibana和多个OpenSearch集群的OpenSearch Dashboards，该方案同样适用于以下场景：
- 使用Nginx统一管理多个Elasticsearch集群的Kibana。
- 使用Nginx统一管理多个OpenSearch集群的OpenSearch Dashboards。
 
#### 方案架构
图1架构图   
![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002516327731.png "点击放大")
通过反向代理服务器Nginx实现路径隔离（指通过不同的路径规则将请求路由到不同的后端服务，避免路径冲突）和集中化管理（指通过统一的配置管理工具，确保多节点配置的一致性）的技术实现如下：
- CSS服务自动同步集群的Base Path配置，确保多节点配置一致性。Elasticsearch和OpenSearch集群分别通过server.basePath和server.rewriteBasePath参数定义路径规则。
- ECS服务器作为Nginx部署载体，连接集群并实现网络互通。Nginx通过配置文件（如"nginx.conf"）中的location块来匹配请求路径，并根据路径规则将请求转发至相应的后端服务。路径隔离通过在Nginx配置中设置不同的location块实现，集中化管理则通过CSS服务自动同步集群的Base Path配置来实现。
- 用户通过统一入口（如http://203.0.113.45:5600）访问Nginx，Nginx根据请求路径中的Base Path（如/css-es-test或 /css-os-test）动态路由至对应的Kibana或OpenSearch Dashboards，分别转发至Elasticsearch或OpenSearch集群。
 
#### 方案优势
- 集中化配置管理：通过CSS服务控制台统一配置Base Path，减少配置错误和运维复杂度。支持多集群管理，显著提升效率。
- 灵活的路径区分与访问控制：通过Base Path实现不同集群的路径隔离，满足多业务线数据展示需求。支持安全模式（HTTPS）和非安全模式（HTTP），适应不同安全策略。
- 高可用与稳定性：Nginx作为成熟反向代理，具备高并发处理能力，确保访问稳定性。
- 可扩展性与易用性：方案支持动态扩展，新增集群时仅需配置Base Path和Nginx映射规则。Nginx支持热更新，不影响正在处理的访问请求。
 
#### 前提条件
- 已创建Elasticsearch集群，集群版本为7.10.2，集群状态为"运行中"，获取并记录集群的内网访问地址（如10.10.1.53:9200）。
- 已创建OpenSearch集群，集群状态为"运行中"。获取并记录了集群的内网访问地址（如10.10.1.117:9200）。
- 已创建ECS用于安装反向代理服务器Nginx，ECS的操作系统选择CentOS 8.0，并绑定弹性公网IP（如203.0.113.45）。要求和Elasticsearch、OpenSearch集群的VPC保持一致，如果不在同一VPC则需要打通网络并配置集群路由。购买操作指导请参见[快速购买和使用Linux ECS](https://support.huaweicloud.com/qs-ecs/ecs_01_0103.html)。
 
#### 步骤一：自定义Kibana的Base Path
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> Elasticsearch"。
3. 在集群列表，单击目标集群名称，进入集群详情页。
4. 选择"集群配置 \> 参数配置 \> Kibana配置"。
5. 单击"编辑"，配置参数值。
   表1配置Base Path 
   | 参数                      | 示例             | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   |:---|:---|:---|
   | server.basePath         | /css-es-test | 自定义Base Path的参数值。 取值范围： - 必须以"/"开头。  - 不能有连续的斜杠（如"//"）。  - 只能包含字母、数字、短横线"-"、下划线"_"、点"."和"/"。  - 允许多层路径，但长度不能超过254字符。  - 不能以"/"结尾。   |
   | server.rewriteBasePath | true          | 指定由Kibana还是反向代理移除请求路径中server.basePath前缀。 取值范围： - true，表示Kibana会自动移除请求路径中的server.basePath前缀。  - false（默认值），表示需要由反向代理（如Nginx）来移除请求路径中的server.basePath前缀。                                                                                                                                                                                                                                                                                        |
      
   
6. 修改完成后，单击"保存"，在弹窗中确认参数无误后勾选"修改Kibana配置会自动重启Kibana进程，期间可能短暂影响Kibana访问。请稍后重试。"，单击"确定"。 当下方的参数配置任务列表显示"作业状态"为"成功"时，表示参数修改成功。
   
 
#### 步骤二：自定义OpenSearch Dashboards的Base Path
1. 登录[云搜索服务管理控制台](https://console.huaweicloud.com/elasticsearch/)。
2. 在左侧导航栏，选择"集群管理 \> OpenSearch"。
3. 在集群列表，单击目标集群名称，进入集群详情页。
4. 选择"集群配置 \> 参数配置 \> Dashboards配置"。
5. 单击"编辑"，配置参数值。
   表2配置Base Path 
   | 参数                    | 示例          | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|:---|
   | server.basePath         | /css-os-test | 自定义Base Path的参数值。 取值范围： - 必须以"/"开头。  - 不能有连续的斜杠（如"//"）。  - 只能包含字母、数字、短横线"-"、下划线"_"、点"."和"/"。  - 允许多层路径，但长度不能超过254字符。  - 不能以"/"结尾。   |
   | server.rewriteBasePath | false        | 指定由OpenSearch Dashboards还是反向代理移除请求路径中server.basePath前缀。 取值范围： - true，表示OpenSearch Dashboards会自动移除请求路径中的server.basePath前缀。  - false（默认值），表示需要由反向代理（如Nginx）来移除请求路径中的server.basePath前缀。                                                                                                                                                                                                                                               |
      
   
6. 修改完成后，单击"保存"，在弹窗中确认参数无误后勾选"修改Dashboards配置会自动重启Dashboards进程，期间可能短暂影响Dashboards访问。请稍后重试。"，单击"确定"。 当下方的参数配置任务列表显示"作业状态"为"成功"时，表示参数修改成功。
   
 
#### 步骤三：安装Nginx
1. 登录弹性云服务器。
2. 安装Nginx。
   1. 执行以下命令，安装Nginx。
      ```
      sudo dnf -y install https://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.20.1-1.el8.ngx.x86_64.rpm
      ```
      
   
   2. 执行以下命令，查看Nginx版本。
      ```
      nginx -v
      ```
      回显如下类似信息。
      ```
      nginx version: nginx/1.20.1
      ```
      
   
   3. 执行以下命令，启动Nginx并设置开机启动。
      ```
      systemctl start nginx
      systemctl enable nginx
      ```
      
   
   4. 查看启动状态，确保Nginx服务状态为active。
      ```
      systemctl status nginx.service
      ```
      回显如下类似信息。
      ![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002483704802.png "点击放大")
      
   
   5. 使用浏览器访问 "http://*{ECS弹性公网IP}* "，显示如下页面，说明Nginx安装成功。
      图2测试访问Nginx   
      ![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000002515864751.png "点击放大") 
    
3. 修改Nginx配置文件，以配置Nginx作为Elasticsearch和OpenSearch集群的反向代理。
   1. 编辑Nginx配置文件。
      ```
      vi /etc/nginx/nginx.conf
      ```
      
   
   2. 增加一个server，server中的IP地址和端口需要与实际环境匹配。
      ```
      server {
        # 自定义Nginx访问端口，例如配置为5600，则后续通过http://{Nginx IP}:5600访问Nginx
        listen 5600;
        # 自定义服务名称，例如kibana_proxy
        server_name kibana_proxy;
        # 定义转发规则，表示URL前缀为server.basePath时使用这个规则
        location /css-os-test {
          # 移除请求路径中server.basePath前缀，仅当server.rewriteBasePath为false时需要配置
          rewrite ^/css-os-test/(.*)$ /$1 break;
          # Kibana或Dashboards的访问地址，支持内网访问地址或公网访问地址
          proxy_pass https://10.10.1.117:5601;
        }
        location /css-es-test {
          proxy_pass http://10.10.1.53:5601;
        }
      }
      ```
      
   
   3. 重新加载配置。
      ```
      nginx -s reload
      ```
      
   
   4. 查看启动状态，确保Nginx服务状态为active。
      ```
      systemctl status nginx.service
      ```
      
    
 
#### 步骤四：使用Nginx统一访问集群
通过Nginx访问不同的集群，以实现统一的访问入口和负载均衡。
访问地址："http://{Nginx IP}:{Nginx访问端口}{Base Path}"。
Nginx IP为Nginx服务器的公网IP地址，即为ECS的弹性公网IP；Nginx访问端口为Nginx配置文件中的server端口号，Base Path为Kibana或OpenSearch Dashboards的server.basePath。
因此，集群访问地址如下所示：
- Elasticsearch集群的Kibana访问地址：http://203.0.113.45:5600/css-es-test
- OpenSearch集群的OpenSearch Dashboards访问地址：http://203.0.113.45:5600/css-os-test
能成功登录Kibana和OpenSearch Dashboards即表示配置成功。
