Node.js 使用Nodejs Mongoose连接到私有VPC内的Mongodb

Node.js 使用Nodejs Mongoose连接到私有VPC内的Mongodb,node.js,mongodb,amazon-web-services,amazon-ec2,mongoose,Node.js,Mongodb,Amazon Web Services,Amazon Ec2,Mongoose,我有一个专有网络,在专有网络中: 私有数据库Mongodb实例。安全入站链接到我的公共节点 安全实例 公共NAT实例 公共nodejs应用程序实例,通过我的NAT实例 我能够通过nodejs实例ssh到Mongodb实例中。 我可以下载并在我的私有数据库上运行mongodb。 但不确定从我的nodejs实例连接到mongodb私有实例的连接字符串 我有:猫鼬mongodb://username:password@xx-x-x-xx:27017/管理员'; 错误消息: MongoNetworkEr

我有一个专有网络,在专有网络中:

  • 私有数据库Mongodb实例。安全入站链接到我的公共节点 安全实例
  • 公共NAT实例
  • 公共nodejs应用程序实例,通过我的NAT实例
  • 我能够通过nodejs实例ssh到Mongodb实例中。 我可以下载并在我的私有数据库上运行mongodb。 但不确定从我的nodejs实例连接到mongodb私有实例的连接字符串

    我有:猫鼬mongodb://username:password@xx-x-x-xx:27017/管理员'; 错误消息: MongoNetworkError:在第一次连接时未能连接到服务器[xx-x-x-xx:27017][MongoNetworkError:connect-EConrefuseXX-x-x-xx:27017]

    我的mongodb只有一个私有ip,我想这就是它无法连接的原因?我必须通过我的NAT实例吗

    有人通过NAT连接到私有Mongodb实例吗

    我以前没有通过私有VPC连接过

    解决方案: 更改了我的mongo.conf文件 发件人: 净: 港口:27017 bindIp:127.0.0.1

    致: 净: 港口:27017 bindIp:0.0.0.0


    基本上将bindIp:更改为0.0.0.0以允许任何IP。

    有点混乱。你是说你有一个VPC,有一个公共子网和一个私有子网?Nodejs应用服务器和NAT网关在公共子网中,MongoDB在私有子网中?
    公共节点安全实例
    是否与
    公共节点应用程序实例
    相同?还有,当你还在同一个内部网络中时,为什么还要通过NAT网关呢?是的,对不起。我在专有网络中有3个子网。私有子网中的MongoDB实例、自己的公共子网中的NAT实例、自己的公共子网中的nodejs服务器实例。节点服务器通过nat实例到达Mongodb实例。我看了一段视频,被告知启动安全数据库的最佳方法就是这样做。我能够通过ssh连接到Mongodb实例并下载Mongodb,但不能确定连接字符串,因为该实例是私有的。我需要这样做吗?感谢您的澄清:)从技术上讲,您不必通过NAT网关访问MongoDB。对于这样一个简单的设置,这使得路由有点混乱,并且不能提高安全性。(另外,这是一个充当NAT网关的EC2实例,还是通过VPC部分中的AWS控制台配置的NAT网关?)总之,
    我可以通过ssh连接到Mongodb实例…
    这是来自nodejs服务器的吗?如果是这样,最有可能的原因是端口27017不包括在连接到MongoDB实例的安全组中(确保它只允许您的nodejs服务器的私有IP)是的,看起来确实有点乱!EC2实例充当NAT网关。我通过Nodejs服务器实例使用ssh。我的Mongodb实例源的安全组设置为ssh的我的Nodejs子网CIDR块以及端口27017。当你说“确保它允许nodejs服务器的私有IP”时,你说的是子网cidr块,就像我说的那样,对吗?我应该彻底抛弃NAT吗?Yep,苹果酒街区不错。您应该能够从nodejs实例
    telnet 27017
    。(P.S.希望xx-x-x-xx意味着xx.x.x.xx,除非它指的是私有DNS)如果你不能连接,可能是操作系统上的一个配置(可能是附加的
    iptables
    ufw
    如果ubuntu.
    SELinux
    如果CentOS或类似亚马逊Linux的变体(尽管我认为默认禁用)?)