现象
- 阿里云Ubuntu服务器
- 刚刚安装完MongoDb
需要配置MongoDB外网的IP,进行了如下的操作:
- 在
/etc/mongodb.conf
进行配置:
bind_ip = 127.0.0.1,XXX.XXX.XXX.XXX(阿里云分配的服务器外网IP)
- 重启MongoDB的服务:
systemctl restart mongodb
- 检查MongoDB服务状态:
systemctl status mongodb
得到如下结果:
● mongodb.service - An object/document-oriented database
Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2020-01-20 20:55:39 CST; 49s ago
Docs: man:mongod(1)
Process: 599 ExecStart=/usr/bin/mongod --config /etc/mongodb.conf (code=exited, status=48)
Main PID: 599 (code=exited, status=48)
启动失败:code=exited, status=48
。
- 查看MongoDB日志:
vim /var/log/mongodb/mongodb.log
可得如下错误日志:
ERROR: listen(): bind() failed errno:99 Cannot assign requested address for socket: XXX.XXX.XXX.XXX:27017
解决方案
- 配置时使用阿里云分配的内网IP,而不是外网的IP。
- 或者使用
ip addr
查看服务器具体的IP,使用这个IP进行配置。
出现Cannot assign requested address for socket: XXX.XXX.XXX.XXX:27017
这种错误,一般是端口配置出错(如:端口被占用、端口没有开放)或者IP出错(如:所配置的IP并不是本机的IP)。在查看了防火墙等配置后,排除前者,那就是IP导致的问题了。
原因
在阿里云服务器管理控制台看到的外网IP并不是服务器真实的IP。
很可能是,外网IP的请求、数据由阿里云的网关等代理,从内网转发到具体的服务器:
数据 ==外网==> 阿里云代理 ==内网==> 服务器