通过反向代理使用 TiDB Dashboard

你可以使用反向代理将 TiDB Dashboard 服务安全从内部网络提供给外部网络。

操作步骤

第 1 步:获取实际 TiDB Dashboard 地址

当集群中部署有多个 PD 实例时,其中仅有一个 PD 实例会真正运行 TiDB Dashboard,因此需要确保反向代理的上游 (Upstream) 指向了正确的地址。关于该机制的详情,可参阅 TiDB Dashboard 多 PD 实例部署章节。

使用 TiUP 部署工具时,操作命令如下(将 CLUSTER_NAME 替换为集群名称):

tiup cluster display CLUSTER_NAME --dashboard

输出即为实际 TiDB Dashboard 地址。样例如下:

http://192.168.0.123:2379/dashboard/

第 2 步:配置反向代理

使用 HAProxy 反向代理

HAProxy 作为反向代理时,方法如下:

  1. 以在 8033 端口反向代理 TiDB Dashboard 为例,在 HAProxy 配置文件中,新增如下配置:

    frontend tidb_dashboard_front bind *:8033 use_backend tidb_dashboard_back if { path /dashboard } or { path_beg /dashboard/ } backend tidb_dashboard_back mode http server tidb_dashboard 192.168.0.123:2379

    其中 192.168.0.123:2379 需替换为第 1 步:获取实际 TiDB Dashboard 地址中取得的 TiDB Dashboard 实际地址中的 IP 及端口部分。

  2. 重启 HAProxy,以使配置生效。

  3. 测试反向代理是否生效:访问 HAProxy 所在机器的 8033 端口下 /dashboard/ 地址,如 http://example.com:8033/dashboard/ ,即可访问 TiDB Dashboard。

使用 NGINX 反向代理

NGINX 作为反向代理时,方法如下:

  1. 以在 8033 端口反向代理 TiDB Dashboard 为例,在 NGINX 配置文件中,新增如下配置:

    server { listen 8033; location /dashboard/ { proxy_pass http://192.168.0.123:2379/dashboard/; } }

    其中 http://192.168.0.123:2379/dashboard/ 需替换为第 1 步:获取实际 TiDB Dashboard 地址中取得的 TiDB Dashboard 实际地址。

  2. 重新载入 NGINX 以使配置生效:

    sudo nginx -s reload
  3. 测试反向代理是否生效:访问 NGINX 所在机器的 8033 端口下 /dashboard/ 地址,如 http://example.com:8033/dashboard/ ,即可访问 TiDB Dashboard。

自定义路径前缀

TiDB Dashboard 默认在 /dashboard/ 路径下提供服务,即使是反向代理也是如此,例如 http://example.com:8033/dashboard/。若要配置反向代理以非默认的路径提供 TiDB Dashboard 服务,例如 http://example.com:8033/foo/http://example.com:8033/,可参考以下步骤。

第 1 步:修改 PD 配置指定 TiDB Dashboard 服务路径前缀

修改 PD 配置中 [dashboard] 类别的 public-path-prefix 配置项,可指定服务路径前缀。该配置修改后需要重启 PD 实例生效。

以 TiUP 部署且希望运行在 http://example.com:8033/foo/ 为例,可指定以下配置:

server_configs: pd: dashboard.public-path-prefix: /foo
使用 TiUP 部署全新集群时修改配置

若要全新部署集群,可在 TiUP 拓扑文件 topology.yaml 中加入上述配置项后进行部署,具体步骤参阅 TiUP 部署文档

使用 TiUP 修改已部署集群的配置
  1. 以编辑模式打开该集群的配置文件(将 CLUSTER_NAME 替换为集群名称)

    tiup cluster edit-config CLUSTER_NAME
  2. server_configspd 配置下修改或新增配置项,若没有 server_configs 请在最顶层新增:

    server_configs: pd: dashboard.public-path-prefix: /foo

    修改完成后的配置文件类似于:

    server_configs: pd: dashboard.public-path-prefix: /foo global: user: tidb ...

    monitored: ... server_configs: tidb: ... tikv: ... pd: dashboard.public-path-prefix: /foo ...
  3. 滚动重启所有 PD 实例生效配置(将 CLUSTER_NAME 替换为集群名称)

    tiup cluster reload CLUSTER_NAME -R pd

    详情请参阅 TiUP 常见运维操作 - 修改配置参数

若希望运行在根路径(如 http://example.com:8033/)下,相应的配置为:

server_configs: pd: dashboard.public-path-prefix: /

第 2 步:修改反向代理配置

使用 HAProxy 反向代理

http://example.com:8033/foo/ 为例,HAProxy 配置如下:

frontend tidb_dashboard_front bind *:8033 use_backend tidb_dashboard_back if { path /foo } or { path_beg /foo/ } backend tidb_dashboard_back mode http http-request set-path %[path,regsub(^/foo/?,/dashboard/)] server tidb_dashboard 192.168.0.123:2379

其中 192.168.0.123:2379 需替换为第 1 步:获取实际 TiDB Dashboard 地址中取得的 TiDB Dashboard 实际地址中的 IP 及端口部分。

若希望运行在根路径(如 http://example.com:8033/),HAProxy 配置如下:

frontend tidb_dashboard_front bind *:8033 use_backend tidb_dashboard_back backend tidb_dashboard_back mode http http-request set-path /dashboard%[path] server tidb_dashboard 192.168.0.123:2379

修改配置并重启 HAProxy 后即可生效。

使用 NGINX 反向代理

http://example.com:8033/foo/ 为例,相应的 NGINX 配置为:

server { listen 8033; location /foo/ { proxy_pass http://192.168.0.123:2379/dashboard/; } }

其中 http://192.168.0.123:2379/dashboard/ 需替换为第 1 步:获取实际 TiDB Dashboard 地址中取得的 TiDB Dashboard 实际地址。

若希望运行在根路径(如 http://example.com:8033/),NGINX 配置为:

server { listen 8033; location / { proxy_pass http://192.168.0.123:2379/dashboard/; } }

修改配置并重启 NGINX 后即可生效:

sudo nginx -s reload

下一步

参阅提高 TiDB Dashboard 安全性文档了解如何增强 TiDB Dashboard 的安全性,如配置防火墙等。