我无法远程连接到我的AWS ec2服务器上的mongodb http接口。
我检查了日志并验证它正在侦听端口28017.我已经使用netstat -a验证了tcp端口28017是否已打开。我在安全组中启用了28017。
我使用ifconfig获取IP,并尝试使用IP:28017访问http接口。什么都没发生。没有错误,没有。
我在我的mongod.conf文件中放了rest = true,我用'sudo service mongod restart'启动mongod作为服务
我甚至尝试用'sudo mongod --rest'开始mongod无济于事。
这是tail -f /log/mongod.conf显示的内容:
Sat Feb 2 02:06:54 [initandlisten] MongoDB starting : pid=3919 port=27017 dbpath=/data 64-bit host=domU-12-31-39-12-3A-A2
Sat Feb 2 02:06:54 [initandlisten] db version v2.2.2, pdfile version 4.5
Sat Feb 2 02:06:54 [initandlisten] git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
Sat Feb 2 02:06:54 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Sat Feb 2 02:06:54 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/data", fork: "true", logappend: "true", logpath: "/log/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid", rest: "true" }
Sat Feb 2 02:06:54 [initandlisten] journal dir=/data/journal
Sat Feb 2 02:06:54 [initandlisten] recover : no journal files present, no recovery needed
Sat Feb 2 02:06:54 [initandlisten] waiting for connections on port 27017
Sat Feb 2 02:06:54 [websvr] admin web console waiting for connections on port 28017
这就是netstat -a显示的内容:
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 *:27017 *:* LISTEN
tcp 0 0 *:mysql *:* LISTEN
tcp 0 0 *:28017 *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 272 domU-12-31-39-12-3A-A2.:ssh pool-108-54-50-116.ny:50722 ESTABLISHED
tcp 0 0 *:ssh *:* LISTEN
udp 0 0 *:bootpc *:*
udp 0 0 domU-12-31-39-12-3A-A2.c:ntp *:*
udp 0 0 localhost:ntp *:*
udp 0 0 *:ntp *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 5402 @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 40948 /var/lib/mysql/mysql.sock
unix 2 [ ACC ] SEQPACKET LISTENING 5468 @/org/kernel/udev/udevd
unix 2 [ ACC ] STREAM LISTENING 6332 /var/run/dbus/system_bus_socket
unix 9 [ ] DGRAM 6278 /dev/log
unix 2 [ ACC ] STREAM LISTENING 182622 /tmp/mongodb-27017.sock
unix 3 [ ] STREAM CONNECTED 182434
unix 3 [ ] STREAM CONNECTED 182433
unix 2 [ ] DGRAM 182429
unix 2 [ ] DGRAM 131031
unix 2 [ ] DGRAM 40170
unix 2 [ ] DGRAM 19247
unix 2 [ ] DGRAM 7231
unix 2 [ ] DGRAM 7212
unix 2 [ ] DGRAM 7194
unix 3 [ ] STREAM CONNECTED 6341 /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 6340
unix 3 [ ] STREAM CONNECTED 6336
unix 3 [ ] STREAM CONNECTED 6335
unix 3 [ ] DGRAM 5484
unix 3 [ ] DGRAM 5483
答案 0 :(得分:26)
我在尝试远程访问mongo shell时遇到了类似的问题,其中一些答案有助于部分解决方案。总结一下:
公共IP / DNS :在EC2管理控制台上选择您的实例,并确保其具有公共IP或公共DNS。 AWS正在将更多默认值移至虚拟私有云(VPC)中,并且可以启动到仅具有私有IP地址(VPC内部)的默认值。如果您没有公共DNS或IP,则需要allocate an Elastic IP。
安全组端口:再次查看EC2控制台上的实例详细信息,找到安全组并选择"查看规则"。假设您使用的是默认的Mongo端口,您应该从27017
打开28017
和0.0.0.0/0
,或者从您的IP地址打开(更安全)。如果没有,请为您的实例选择一个安全组,然后从控制台转到Inbound
> Edit
> Add Rule
> Custom TCP Rule
,Port Range: 27017
和适当的IP Source
。对于http界面,请为Port Range: 28017
添加其他规则。
/etc/mongod.conf :
port=27017
以确保您拥有默认端口(我不认为这实际上是必要的,但它让我感觉更好,知道在哪里更改默认值很好港口......)bind_ip=127.0.0.1
以收听外部接口(例如远程连接)httpinterface=true
创建用户:您需要create an admin and/or user远程访问数据库。
答案 1 :(得分:17)
对于您的EC2实例,添加两个入站自定义TCP规则以允许端口27017和28017上的入站流量。
确保在/etc/mongod.conf文件中注释掉“bind_ip = 127.0.0.1”
重启mongod服务器: $ sudo service mongod restart
答案 2 :(得分:2)
听起来您的安全组设置有问题。您可以尝试从框中访问管理界面:
curl http://localhost:28017/
如果您收到回复的内容,那么您的安全组设置(或者包装盒上的防火墙)可能会出现问题。
答案 3 :(得分:0)
您是否检查过它正在监听公共IP以及该端口?它可能正在侦听localhost。