让Linux上的MongoDB监听远程连接
我已经成功地将MongoDB作为服务安装在Windows上(在本地计算机上),但现在我想将MongoDB移动到一个单独的服务器上。所以我将tarball提取到网络上的一个虚拟服务器(运行linux) 当我从本地机器使用PuTTY连接到服务器(“testmongoserver”)时,我启动了mongod服务器,它告诉我它正在侦听默认的28017端口。mongo控制台也在工作,允许我创建一个新的数据库(testdb)并向其中添加用户 但是,我无法从远程访问服务器。当我键入让Linux上的MongoDB监听远程连接,linux,networking,mongodb,Linux,Networking,Mongodb,我已经成功地将MongoDB作为服务安装在Windows上(在本地计算机上),但现在我想将MongoDB移动到一个单独的服务器上。所以我将tarball提取到网络上的一个虚拟服务器(运行linux) 当我从本地机器使用PuTTY连接到服务器(“testmongoserver”)时,我启动了mongod服务器,它告诉我它正在侦听默认的28017端口。mongo控制台也在工作,允许我创建一个新的数据库(testdb)并向其中添加用户 但是,我无法从远程访问服务器。当我键入testmongoserve
testmongoserver:28017
时,它不会像本地计算机上的localhost:28017
那样打开HTTP控制台。我也无法使用官方驱动程序和提供连接字符串进行连接
在Linux上安装MongoDB的必要步骤是什么,这样我就可以通过connectionstring从远程机器访问它,并通过testmongoserver:28017使用它的HTTP控制台
谢谢
127.0.0.1
。你可以:
绑定ip
行(使用#
字符)。但是请注意,所有远程连接都可以连接您的MongoDB服务器李>
有关bind_ip
配置选项的更多信息:
绑定IP也可以设置为命令参数:
2.防火墙
检查您是否未在防火墙后运行确保在
/etc/mongodb.conf
文件中有以下行
bind_ip = 0.0.0.0
另一个问题可能是mongodb端口未启用。从另一台主机检查服务器上启用的端口。为此,您可以使用以下命令:
sudo nmap -P0 your_server_ip
你可以得到这样的答案:
Host is up (0.052s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
如果您在云中使用虚拟服务器(如AWS),则需要添加新规则以添加mongodb端口(默认情况下为27017)
重要信息:请注意,通过此配置,任何人都可以访问您的数据库
刚刚出现此问题,此问题已解决: 使用
sudo nano/etc/mongod.conf
编辑/etc/mongod.conf
,确保网络部分如下所示(默认情况下,本地主机绑定不允许远程访问):
确保在完成以上和以下操作后重新启动mongod(假设systemd ubuntu 16.04+等):
sudo服务mongod重启
显然,从安全的角度来看,如果您打算向您的网络/世界开放mongo,请注意这一点(如果有)的影响。I通过以下引用修复: 实际上,首先我在mongod.conf中将我的
bindIp
从127.0.0.1
更改为0.0.0
,
并实现安全性:
security:
authorization: "enabled"
然后,我使用
sudo服务mongod restart
重新启动了mongod(因为mongod.conf中有新的更改),然后设置防火墙以打开mongod运行端口(通过iptables),并在admin db中创建一个具有新访问权限的新用户(基于此链接:),最后使用()并使用mongocompass.exe成功连接到远程mongod。是否使用了正确的连接字符串?更改了任何设置?确保没有防火墙规则(在任何一侧)阻止您连接到远程服务器。我的问题是#3。这是由于@Yves M.在his中描述的绑定IP设置为127.0.0.1。有时,需要重新启动服务器才能使更改生效。从配置角度来看,这是一个坏主意。通过注释掉bind_ip行,您将获得相同的结果。我建议用逗号分隔服务器的特定私有或公共IP:127.0.0.1,10.x.x.x真是个坏主意,特别是在使用mongo时出现了新的漏洞。是的,在生产环境中使用它是个坏主意。如果env=development,则此设置为“可接受”。小心我在Windows中,没有看到etc/mongod.conf文件。它在哪里,或者我应该把它确切地放在哪里?我试图将它放在我的mongodb.config文件中,但它没有改变任何东西。但是取消注释bind_ip不允许远程访问。必须将其设置为0.0.0.0才能接受来自远程主机的连接。正如其他人所提到的,在prod env中提供一个您希望连接的IP地址列表是实现这一点的方法。应该选择它作为正确答案。我要澄清的是,要接受特定网络适配器上的连接,必须将绑定ip设置为该网络适配器的ip。这不是传入连接的筛选器!正如在前面的文章中所指出的,您还应该使端口27017在本例中可用。此外,您可能存在安全问题,为了减少这些问题,您可以(如前所述)限制端口可访问的IP和/或使用密码创建用户。我最近经历了这个过程,我在这里对整个过程做了一些记录:。
security:
authorization: "enabled"