如何允许使用 Nginx 安全地远程连接到本地 MySQL 数据库?

How do I allow secure remote connections to a local MySQL database using Nginx?

我想尽可能避免向外界开放默认端口 3306。我们有 Nginx 运行 用于其他应用程序的反向代理。这里的目标是以安全的方式从本地网络外部使用 MySQL Workbench 等客户端访问 MySQL 数据库。 MySQL 服务器在 Debian (Linux) 虚拟机上运行。

我如下所述配置了一个服务器块。使用 MySQL Workbench 中的非根用户连接到 mysql.domain.com,端口 80 会导致失败。

服务器块:

server {

    server_name mysql.domain.com;

    location / {
        proxy_pass http://localhost:3306/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

错误信息:

Failed to Connect to MySQL at mysql.domain.com:80 with user non-root. 
Lost connection to MySQL at 'waiting for initial communication packet', system error: 10060

The goal here is to access the MySQL databases with clients such as MySQL Workbench from outside the local network

所有现代 MySQL GUI 客户端都支持 SSH 隧道。这是最安全的连接方法,并且需要在服务器端进行零配置:如果您可以通过 SSH 连接,那么您可以连接到该主机上的 MySQL。

在MySQLWorkbench中,创建连接时,select"Standard TCP/IP over SSH"作为连接方式,然后填写SSH连接详情和MySQL连接细节。关键点是将 MySQL 服务器设置为 127.0.0.1,因为您通常希望连接到 MySQL 实例,即您 SSH 进入的机器上的 运行。仅此而已。