EC2部署的MongoDB连接Node.js应用报无法使用IPv4、querySrv ENOTFOUND错误
EC2 MongoDB连接故障排查解决步骤
你遇到的querySrv ENOTFOUND报错核心原因是你使用了MongoDB的+srv格式连接串,这种格式默认会查询_mongodb._tcp.前缀的SRV DNS记录,而你自行部署在EC2上的MongoDB默认没有配置对应SRV记录,所以会触发该错误,可按以下步骤逐一排查修复:
1. 修正连接串格式
- 放弃使用
mongodb+srv://开头的SRV连接格式,改用标准连接格式:mongodb://<数据库账号>:<数据库密码>@<EC2公网IP/EC2公网域名>:27017/<目标数据库名>?authSource=admin - 显式指定MongoDB默认端口27017,不需要依赖DNS解析获取连接信息。
2. 排查IPv4连接限制
如果修改连接串后仍然提示无法使用IPv4连接,按以下项检查配置:
- 检查EC2安全组入站规则:确认开放了27017端口的入站权限,测试阶段可临时将源地址设为
0.0.0.0/0,验证连通后再缩小为Node.js应用的公网IP。 - 检查MongoDB绑定地址:登录EC2实例,编辑MongoDB默认配置文件
/etc/mongod.conf,将bindIp参数从默认的127.0.0.1修改为0.0.0.0(允许所有IPv4地址连接),修改完成后执行sudo systemctl restart mongod重启服务生效。 - 检查EC2内部防火墙:确认EC2实例的iptables/ufw没有拦截27017端口,Ubuntu系统可执行
sudo ufw allow 27017临时放通端口验证。
3. 连通性验证
- 在运行Node.js应用的机器上执行
telnet <EC2公网IP> 27017,如果能成功连接说明网络层面没有问题,否则需要回头检查前面的网络配置项。 - 可直接用MongoDB本地客户端工具连接EC2上的MongoDB实例,验证账号密码、数据库权限配置正确后,再将对应参数填入Node.js的连接配置中。
可选:需要使用SRV连接的配置方法
如果你确实需要用+srv格式的连接串,可以在你的域名解析服务商处添加一条SRV记录:记录名为_mongodb._tcp.<你的自定义域名>,端口设为27017,目标地址填写你的EC2公网域名,等待DNS解析生效后即可正常使用SRV格式连接串。
内容的提问来源于stack exchange,提问作者user16393035
相关产品推荐
相关产品推荐

