Abrir el puerto predeterminado 3306 al mundo exterior es algo que me gustaría evitar si es posible. Tenemos Nginx ejecutándose con fines de proxy inverso para otras aplicaciones. El objetivo aquí es acceder a las bases de datos MySQL con clientes como MySQL Workbench desde fuera de la red local, de forma segura. El servidor MySQL se ejecuta en una máquina virtual Debian (Linux).
Configuré un bloque de servidor como se describe a continuación. La conexión a mysql.domain.com, puerto 80, con un usuario no root en MySQL Workbench da como resultado una falla.
Bloque de servidor:
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; } }Mensaje de error:
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: 10060El objetivo aquí es acceder a las bases de datos MySQL con clientes como MySQL Workbench desde fuera de la red local.
Todos los clientes modernos de MySQL GUI admiten túneles SSH. Este es el enfoque más seguro para conectarse y no requiere ninguna configuración en el lado del servidor: si puede conectarse a través de SSH, entonces puede conectarse a MySQL en ese host.
En MySQL Workbench, al crear una conexión, seleccione "TCP/IP estándar sobre SSH" como método de conexión, luego complete los detalles de la conexión SSH y los detalles de la conexión MySQL. El punto clave es poner el servidor MySQL como 127.0.0.1 , ya que normalmente desea conectarse a la instancia de MySQL que se ejecuta en la máquina en la que utiliza SSH. Eso es todo al respecto.