ENOTFOUND

问题描述

服务A捕捉到的错误

  1. 前端访问后端服务A登录接口,在服务A登录接口中调用服务B账号密码验证接口,然后服务A中无法正确调用服务B的接口,并捕获到上图的错误;
  2. 本地开发调试的时候没有问题,服务A发布到开发环境出现这个错误;

问题分析

第一次遇到这种问题,首先入手是两个信息:

  1. 错误码:ENOTFOUND & getaddrinfo;
  2. 调用服务B接口:https://service-b/api;

错误码原因

这个错误找了一下原因,一般为DNS无法解析域名会抛出这样一个错误。

服务B域名

询问下运维后给到的反馈是,服务B的域名解析是公司内网的,在外网访问无法解析到正确的服务器上。

问题解释

经过以上分析,错误原因是服务B在公网无法正确解析的问题。详细:

  1. 在本地开发时,因使用的是公司内网,所以本地开发能够正常访问;
  2. 服务A在开发环境,访问服务B的域名走的是公网,DNS无法正确解析服务B的域名;

问题解决

问题反馈给运维后,运维给了两个解决方案:

  1. 服务B的域名解析放到公网;
  2. 服务B的域名在服务A内部解析;

服务B只需要在公司内部访问,所以没有必要公开到公网上,还增加了不必要的风险。