我在 Centos 7 上使用 Mongodb 3.6.3。
我正在运行以下命令:
sudo mongod --storageEngine wiredTiger --dbpath /data --bind_ip_all --logpath /var/log/mongodb/mongod.log --fork
一切都会正常工作。除了,绑定 all 不够安全。
我曾经在尝试时收到过日志记录错误,--bind_ip 127.0.0.1,privateIP
但发现当我这样做时错误会消失bind_ip [127.0.0.1,privateIP]
。
但是,当我尝试在本地连接到 mongo 时,它会失败,并且通过我的站点,它会一直坐在那里直到超时。我检查了一下sudo netstat -plnt | egrep mongod
,然后什么都没有出现,虽然它成功地分叉了 mongod 进程,但它没有绑定到任何指定的 ips。
--bind_ip_all
作为参考,当我在它返回的版本上尝试相同的命令时tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1645/mongod
。
我的问题是,为什么--bind_ip ips
无法绑定到指定的ips?
旁注 - 绑定 ips 时,我应该绑定我的弹性 ip 还是我的私有 ip?
根据 MongoDB BOL ,此处 有警告:在绑定到其他 ip 地址之前,请考虑启用安全检查表中列出的访问控制和其他安全措施,以防止未经授权的访问。
在这里我想说,如果您要绑定多个 ip,那么根据此处的 MongoDB 文档要绑定到多个地址,请输入逗号分隔值的列表。
例子
在上面的示例中,假设我绑定了多个 ip。一个外部 ip (192.168.103.100) 和另一个 localhost 或(代替 localhost,即 127.0.0.1)。
net.bindIp
类型:字符串
默认值:本地主机
Starting in MongoDB 3.6, mongos and mongod bind to localhost (127.0.0.1) by default
.“--fork”是一个标志,告诉 mongod 作为后台进程运行,而不是作为阻塞 shell 的活动进程。“--fork”是一个标志,告诉 mongod 作为后台进程运行,而不是作为阻塞 shell 的活动进程。
大多数情况下,当我们无法
mongd.conf
正确配置(我的意思是说 bindIp、端口和授权限制)时,就会得到timed out error
.net.bindIpAll
类型:布尔值
默认值:假
如果为 true,则 mongos 和 mongod 实例绑定到所有 IP 地址。将 mongos 和 mongod 附加到可公开访问的接口时,请确保您已实施适当的身份验证和防火墙限制以保护数据库的完整性。
将 net.bindIp 设置为
0.0.0.0,::
绑定到所有 IP 地址。与上面的 mongo shell 输出一样,mongod 服务器默认返回 localhost 的 pid 端口号
27017
。注意: net.bindIp 和 net.bindIpAll 是互斥的。也就是说,您可以指定其中之一,但不能同时指定两者。
可能是你的
mongod.conf
配置文件没有正确配置。这就是为什么您无法启动 mongod 服务器文件到该特定 ip 的原因。由于 MongoDB 配置文件使用YAML格式。
mongod设置的示例配置文件,你可以在这里找到
例如,我还
mongod.conf
以“YAML”格式写下了示例配置文件。除非您无法通过您的 mongod.conf 文件运行 mongod 服务器,否则这意味着您的 YAML 配置文件中存在一些错误。
注意: YAML 不支持制表符进行缩进:请改用空格。
希望这对您有所帮助。