You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 在Vercel构建时出现Fetch错误:getaddrinfo ENOTFOUND

生产环境构建时API请求出现getaddrinfo ENOTFOUND错误的解决方案

针对本地运行正常但生产构建时API请求DNS解析失败的问题,以下是可落地的排查与解决方向:

1. 验证生产环境的域名解析能力

在生产构建/部署的服务器或CI环境中,执行命令测试API域名的解析情况:

nslookup api.***********
# 或
ping api.***********
  • 如果命令返回"无法找到主机",说明生产环境DNS配置无法解析该域名:
    • 尝试更换服务器DNS为通用公共DNS(如8.8.8.8)
    • 确认API域名是否已生效、是否仅在特定网络(如内部私有网络)可访问

2. 确认生产环境的环境变量配置

  • 检查生产环境的API_URL是否正确:部分部署平台(如Vercel、Netlify)需在控制台手动配置环境变量,本地.env文件不会自动同步。可在数据获取逻辑中添加日志验证:
    export const getStaticProps = async () => {
      console.log('生产环境实际API_URL:', process.env.API_URL); // 构建时查看日志输出
      // 原有请求逻辑
    };
    
  • 排查环境变量是否存在格式问题:比如API_URL被意外添加了引号,导致实际请求地址变为"https://api.***********",引发解析错误

3. 检查生产构建环境的网络限制

  • 如果使用CI/CD工具(GitHub Actions、GitLab CI)构建,确认CI环境是否允许外部网络请求:部分CI环境默认启用防火墙,需将API域名加入白名单
  • 部署到自有服务器时,检查服务器防火墙规则,确保允许出站请求到API的443端口(HTTPS)

4. 临时用IP替代域名测试

若域名解析问题无法快速解决,可尝试直接使用API服务器的公网IP发起请求,同时手动添加Host头(适配API服务器的域名校验):

export const getStaticProps = async () => {
  const response = await fetch(`https://1.2.3.4/hoopsbot/random`, {
    headers: {
      Authorization: `bearer ${API_BEARER_TOKEN}`,
      Host: 'api.***********' // 替换为实际API域名
    },
  })
  // 原有处理逻辑
};

如果请求成功,说明问题确实出在DNS解析环节

5. 优化错误日志定位问题

修改错误处理逻辑,打印更详细的调试信息:

.catch((error) => {
  console.error('API请求失败详情:', {
    errorMsg: error.message,
    requestUrl: `${API_URL}/hoopsbot/random`,
    envApiUrl: process.env.API_URL
  });
  throw new Error('获取数据失败');
});

通过构建日志中的详细信息,确认请求地址、环境变量是否符合预期

内容的提问来源于stack exchange,提问作者Jim Burch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:55:44