通过隧道本地主机节点 JS 连接到远程数据库服务器 (NGINX) 时出错
ERROR connecting to remote database server(NGINX) via tunneled localhost Node JS
error connecting: Error: Connection lost: The server closed the connection.
at Protocol.end (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:109:13)
at Socket.<anonymous> (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
--------------------
at Protocol._enqueue (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:141:48)
at Protocol.handshake (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:52:41)
at Connection.connect (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\Tony\Documents\TestServer\app.js:13:12)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
使用此代码
var express = require('express');
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: '8888',
user: 'root',
password: 'xxx',
database: 'shop'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
服务器是 BITNAMI 使用 google 云
本地主机在 windows,我可以通过浏览器连接到 phpmyadmin,但脚本不起作用。谢谢
要查明隧道是否真的已建立,您可以运行。
sudo lsof -i -n | egrep '\<ssh\>'
你应该从中得到一些台词。如果其中之一在这些行附近:
ssh 11704 root 3u IPv4 47283826 0t0 TCP [localip]:46286->[remoteip]:ssh (ESTABLISHED)
然后连接打开。在这种情况下,您应该确保将 nodejs 应用程序连接到正确的本地端口。上面的代码似乎是正确的,只要确保隧道是从端口 :8888 到远程数据库端口,也许是 :3607 或任何端口。
否则,如果您的隧道设置不正确。有很多教程解释如何设置 ssh 隧道,比如这个:
确保您还使用 autossh 设置隧道。 SSH 隧道不稳定,容易掉线。 Autossh 将确保恢复连接,即 运行 计算机启动时。
https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/
嗨 Bitnami 开发者,
如您所述,您可以使用 8888 端口访问 phpMyAdmin,因为您打开了一个隧道以通过该端口访问 Apache 和该应用程序。您需要打开一个新隧道才能直接访问 MySQL,因为出于安全原因,我们将服务器配置为仅侦听本地主机。
这个新隧道的源端口将是一个不同的端口(即 8989),目标端口将是 localhost:3306(3306 是 MySQL 默认端口)。您需要修改代码以使用 8989 端口而不是 8888 端口。
希望这些信息对您有所帮助。
乔塔
error connecting: Error: Connection lost: The server closed the connection.
at Protocol.end (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:109:13)
at Socket.<anonymous> (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\Connection.js:109:28)
at emitNone (events.js:91:20)
at Socket.emit (events.js:185:7)
at endReadableNT (_stream_readable.js:974:12)
at _combinedTickCallback (internal/process/next_tick.js:74:11)
at process._tickCallback (internal/process/next_tick.js:98:9)
--------------------
at Protocol._enqueue (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:141:48)
at Protocol.handshake (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\protocol\Protocol.js:52:41)
at Connection.connect (C:\Users\Tony\Documents\TestServer\node_modules\mysql\lib\Connection.js:130:18)
at Object.<anonymous> (C:\Users\Tony\Documents\TestServer\app.js:13:12)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
使用此代码
var express = require('express');
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
port: '8888',
user: 'root',
password: 'xxx',
database: 'shop'
});
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
服务器是 BITNAMI 使用 google 云
本地主机在 windows,我可以通过浏览器连接到 phpmyadmin,但脚本不起作用。谢谢
要查明隧道是否真的已建立,您可以运行。
sudo lsof -i -n | egrep '\<ssh\>'
你应该从中得到一些台词。如果其中之一在这些行附近:
ssh 11704 root 3u IPv4 47283826 0t0 TCP [localip]:46286->[remoteip]:ssh (ESTABLISHED)
然后连接打开。在这种情况下,您应该确保将 nodejs 应用程序连接到正确的本地端口。上面的代码似乎是正确的,只要确保隧道是从端口 :8888 到远程数据库端口,也许是 :3607 或任何端口。
否则,如果您的隧道设置不正确。有很多教程解释如何设置 ssh 隧道,比如这个:
确保您还使用 autossh 设置隧道。 SSH 隧道不稳定,容易掉线。 Autossh 将确保恢复连接,即 运行 计算机启动时。
https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/
嗨 Bitnami 开发者,
如您所述,您可以使用 8888 端口访问 phpMyAdmin,因为您打开了一个隧道以通过该端口访问 Apache 和该应用程序。您需要打开一个新隧道才能直接访问 MySQL,因为出于安全原因,我们将服务器配置为仅侦听本地主机。
这个新隧道的源端口将是一个不同的端口(即 8989),目标端口将是 localhost:3306(3306 是 MySQL 默认端口)。您需要修改代码以使用 8989 端口而不是 8888 端口。
希望这些信息对您有所帮助。
乔塔