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

如何让Node.js应用同时在IPv4和IPv6的80端口运行?

解决Express应用同一端口同时支持IPv4和IPv6访问的问题

当你将Express应用绑定到::(IPv6通配地址)时,部分操作系统默认会以IPv6-only模式运行套接字,导致它无法处理IPv4请求,进而让不支持IPv6的设备无法访问应用。以下是两种可行的解决方式:

方案1:代码层面同时监听IPv4和IPv6地址

你可以在同一个Express实例上创建两个监听:一个绑定IPv4的0.0.0.0,另一个绑定IPv6的::。由于IPv4和IPv6属于不同的地址族,同一端口可以被这两个监听同时占用,不会产生冲突。

修改后的代码示例:

const express = require('express')
const app = express()
const port = 80
const host6 = "::";
const host4 = "0.0.0.0";

app.get('/', (req, res) => {
  res.send('Hello World!')
})

// 监听IPv6地址
app.listen(port, host6, () => {
  console.log(`IPv6 server listening at http://[${host6}]:${port}`)
})

// 监听IPv4地址
app.listen(port, host4, () => {
  console.log(`IPv4 server listening at http://${host4}:${port}`)
})

方案2:系统级开启IPv6套接字兼容IPv4

如果不想修改代码,可以通过调整系统配置,让绑定::的套接字同时接收IPv4请求:

  • Linux/macOS:执行以下命令临时生效,如需永久生效可写入/etc/sysctl.conf文件
    sysctl -w net.ipv6.bindv6only=0
    
  • Windows:修改注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters,将DisabledComponents的值设置为0(需重启系统生效)

这种方式下,你只需保持原来绑定::的代码即可,系统会自动将IPv4请求映射到IPv6套接字上。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:22