不太想安装本地工具,希望随时随地打开浏览器就可以管理mysql。
找了一圈,要么是PHP的,要么安装太麻烦,要么各种各样的问题,最后决定用dbgate。官网:https://dbgate.io/
这东西也不是什么善茬,免费版一堆的功能限制,最要命的是不支持密码保护,主要一部署任何人都可以访问,这个很危险!所以主要是研究如何最简单的增加密码保护。
安装 dbgate
npm i dbgate-serve
# 启动,http://localhost:3000 端口不支持自定义
dbgate-serve
这就安装好了,直接访问类似这样的界面:
在这上面新建数据库连接,输入数据库账号和密码。
注意:
- 分免费版和社区版,免费版不支持端口、账号密码等一切配置,非常恶心;
- 切记不要直接把端口暴露公网,否则你的数据库直接跪了;
增加密码保护
nginx转发+auth_basic
# 安装密码工具
sudo yum install httpd-tools
# 生成密钥文件,账号 admin
htpasswd -c /etc/nginx/dbgate_password admin
nginx配置
server {
listen 80;
server_name yourdomain.com; # 你的域名或IP
# 对整个网站启用密码保护,名字随便取,唯一即可
auth_basic "DbgateAuth";
# 密码文件路径
auth_basic_user_file /etc/nginx/dbgate_password;
# 网站原有配置(如反向代理或静态文件路径)
location / {
proxy_pass http://localhost:3000; # 若为代理,指向实际服务
}
}
配置后本来万事大吉,但是无法记住密码,每个HTTP请求之间是无状态的,会一直弹出反复输入密码,后来发现仅windows存在问题,mac是好的,不过也没时间研究,这个方案作罢。
caddy方案
这个方案应该也是可行的,但是login模块无法通过yum安装,嫌麻烦,所以也放弃。
cookie方案
最简单最暴力方案,直接判断cookie来决定是否转发。
location / {
if ($cookie_your_token !~ "^你的很复杂的密码$") {
add_header Content-Type "text/html; charset=utf-8";
return 200 "<div>未登录</div>";
}
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 10;
proxy_pass http://127.0.0.1:3000;
}
后台启动服务
nohup dbgate-serve &