背景

因为数据库往往部署在内网,当需要在外网查看 TiDB 的的状态的时候,就很不方便,通过反向代理可以将TiDB Dashboard 释放到外网,方便随时查看数据库运行状态。

本文以 HAProxy 举例

配置反向代理

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

1
2
3
4
5
6
7
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为 TiDB Dashboard 实际地址中的 IP 及端口部分。

重启 HAProxy,以使配置生效。

测试反向代理是否生效:访问 HAProxy 所在机器的 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/,可参考以下步骤。

修改 PD 配置指定 TiDB Dashboard 服务路径前缀

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

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

1
2
3
server_configs:
pd:
dashboard.public-path-prefix: /foo

修改反向代理配置

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

1
2
3
4
5
6
7
8
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 需替换为 TiDB Dashboard 实际地址中的 IP 及端口部分。

请务必保留 use_backend 指令中的 if 部分,确保只有该路径下的服务会被反向代理,否则将引入安全风险。参见提高 TiDB Dashboard 安全性

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

1
2
3
4
5
6
7
8
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 后即可生效。