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

Node.js 18升级后localhost解析从127.0.0.1变为::1,如何解决?

解决Node.js 18中localhost解析为IPv6导致的通信故障

一、Node.js层面的快速修复(无需修改系统)

  • 直接替换localhost为127.0.0.1:把代码里所有用到localhost的地方改成IPv4地址,强制走IPv4通信,这是最快的临时解决方式。
  • 启动时指定IPv4优先:运行应用前添加环境变量,比如:
    NODE_OPTIONS="--dns-result-order=ipv4first" node app.js
    
    这样Node.js会优先解析出IPv4地址,覆盖系统默认顺序。
  • 代码中强制指定解析类型:如果用到dns模块做域名解析,手动设置family:4强制IPv4:
    const dns = require('dns');
    dns.lookup('localhost', { family: 4 }, (err, address) => {
      console.log(address); // 输出127.0.0.1
    });
    
    用HTTP客户端(axios、fetch等)时,也可以直接写IP地址替代localhost。

二、修改Linux系统的DNS解析顺序(全局生效)

Linux下IPv6优先是由/etc/gai.conf配置文件控制的,修改它可以让IPv4优先级更高:

  1. 编辑配置文件(需要sudo权限):
    sudo nano /etc/gai.conf
    
  2. 找到被注释的这行:
    # precedence ::ffff:0:0/96  100
    
    去掉开头的#号,保存退出。这行配置会让IPv4映射的IPv6地址优先级高于纯IPv6地址,系统解析时就会优先返回IPv4结果。
  3. 重启网络服务(不同发行版命令不同):
    • Ubuntu/Debian:sudo systemctl restart systemd-resolved
    • CentOS/RHEL:sudo systemctl restart NetworkManager

修改后,系统层面的DNS解析会优先返回IPv4,Node.js遵循系统规则后也会把localhost解析为127.0.0.1。

三、为什么Linux默认IPv6优先?

现在多数Linux发行版默认开启IPv6支持,且gai.conf默认设置IPv6优先级更高,这是为了适配IPv6的普及趋势,但对依赖IPv4本地通信的老应用就会出现兼容性问题。

内容的提问来源于stack exchange,提问作者Utkarsh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:00