如何允许使用 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 进入的机器上的 运行。仅此而已。
我想尽可能避免向外界开放默认端口 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 进入的机器上的 运行。仅此而已。