错误通过隧道localhost节点JS连接到远程数据库服务器(NGINX)

时间:2017-03-15 14:02:24

标签: node.js nginx bitnami

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使用谷歌云

localhost在Windows上,我可以通过浏览器连接到phpmyadmin,但脚本不起作用。谢谢

2 个答案:

答案 0 :(得分:0)

要确定隧道是否真的已设置,您可以运行。

sudo lsof -i -n | egrep '\<ssh\>'

你应该从中得到一些答案。如果其中一个是围绕这些线:

ssh     11704     root    3u  IPv4 47283826      0t0  TCP [localip]:46286->[remoteip]:ssh (ESTABLISHED)

然后连接开启。在这种情况下,您应确保将nodejs应用程序连接到正确的本地端口。上面的代码似乎是正确的,只需确保隧道从端口:8888到远程数据库端口,可能是:3607或任何端口。

否则,如果您的隧道设置不正确。有很多教程解释如何设置ssh隧道,例如:

https://support.cloud.engineyard.com/hc/en-us/articles/205408088-Access-Your-Database-Remotely-Through-an-SSH-Tunnel

确保您还使用自动搜索来设置隧道。 SSH隧道不稳定,往往会掉线。 Autossh将确保连接恢复,并在计算机启动时运行。

https://www.everythingcli.org/ssh-tunnelling-for-fun-and-profit-autossh/

答案 1 :(得分:0)

Hi Bitnami开发人员,

正如您所提到的,您可以使用8888端口访问phpMyAdmin,因为您打开了通过该端口访问Apache和该应用程序的隧道。您需要打开一个新隧道才能直接访问MySQL,因为我们将服务器配置为仅出于安全原因侦听localhost。

此新隧道的源端口将是不同的端口(即8989),目标将是localhost:3306(3306是MySQL默认端口)。您需要修改代码以使用8989端口而不是8888端口。

我希望这些信息有所帮助。

Jota