ENOTFOUND
- 📅 日期:2019年12月06日 星期五
- 🌤 天气:多云微风
问题描述
- 前端访问后端服务A登录接口,在服务A登录接口中调用服务B账号密码验证接口,然后服务A中无法正确调用服务B的接口,并捕获到上图的错误;
- 在本地开发调试的时候没有问题,服务A发布到开发环境出现这个错误;
问题分析
第一次遇到这种问题,首先入手是两个信息:
- 错误码:ENOTFOUND & getaddrinfo;
- 调用服务B接口:https://service-b/api;
错误码原因
这个错误找了一下原因,一般为DNS无法解析域名会抛出这样一个错误。
服务B域名
询问下运维后给到的反馈是,服务B的域名解析是公司内网的,在外网访问无法解析到正确的服务器上。
问题解释
经过以上分析,错误原因是服务B在公网无法正确解析的问题。详细:
- 在本地开发时,因使用的是公司内网,所以本地开发能够正常访问;
- 服务A在开发环境,访问服务B的域名走的是公网,DNS无法正确解析服务B的域名;
问题解决
问题反馈给运维后,运维给了两个解决方案:
- 服务B的域名解析放到公网;
- 服务B的域名在服务A内部解析;
因服务B只需要在公司内部访问,所以没有必要公开到公网上,还增加了不必要的风险。