【问题标题】:Tunneling mongodb using ngrok使用 ngrok 隧道化 mongodb
【发布时间】:2019-12-04 19:52:42
【问题描述】:

我在我的机器上本地托管了一个 MongoDb,并在端口 localhost:27017 中成功运行。该数据库具有一个名为“testDb”的集合的用户名和密码。在代码中,我可以使用 localhost 成功访问数据库。

我正在尝试使用 ngrok 从远程桌面访问这个 MongoDb。我已经实现了端口转发,命令提示符中显示了以下响应。

转发https://5e825c82.ngrok.io -> http://localhost:27017

我也尝试过更改端口 => 转发https://5e825c82.ngrok.io -> http://localhost:28017

两个端口都失败并显示以下错误消息: 与http://5e825c82.ngrok.io 的连接已成功通过隧道连接到您的 ngrok 客户端,但客户端未能建立与本地地址 localhost:28017 的连接。 确保 Web 服务正在 localhost:28017 上运行,并且它是有效地址。 遇到的错误是:dial tcp [::1]:28017: connectex: No connection could be made because the target machine主动拒绝。

// Works fine
MongoClient client = new MongoClient("mongodb://admin:admin@localhost:27017/testDb");

// Fails:
MongoClient client = new MongoClient("mongodb://admin:admin@5e825c82.ngrok.io/testDb");

我想知道如何使用 ngrok 建立与 MongoDb 的连接。

【问题讨论】:

  • 根据错误信息 ngrok 尝试在 IPv6 中建立本地连接。确保在您的 localhost 中启用它或将 ngrok 配置为仅使用 IPv4。
  • 我不确定如何进行更改。任何快速链接都会有所帮助。
  • 我认为这与 mongodb 是它自己的协议有关,所以没有 http 层。尝试使用 ngrok 创建 TCP 隧道。我认为这对你有用。

标签: mongodb authentication ngrok


【解决方案1】:

MongoDB 使用 TCP 而不是 HTTP

试试下面的命令:

ngrok tcp 27017

(注意tcp,而不是http,我认为这是您使用的)


当你使用 TCP 时,由于某种原因你需要做一些额外的步骤,当你尝试上面的命令时,ngrok 会提示你并告诉你需要做什么。

  1. https://dashboard.ngrok.com/get-started注册一个ngrok帐户
  2. 在本地运行此页面上显示在 3 框中的命令。关联您的帐户(例如ngrok authtoken 123ABC456ETC

  1. 现在再次尝试该命令 (ngrok tcp 27017)

【讨论】:

    猜你喜欢
    • 2019-03-27
    • 2016-09-18
    • 2017-02-21
    • 2020-04-30
    • 2015-03-11
    • 2021-04-16
    • 2021-01-27
    • 2021-03-27
    • 2020-05-09
    相关资源
    最近更新 更多