VPS部署Node.js HTTP服务器遇EADDRNOTAVAIL错误求助
解决Node.js绑定公网IP出现EADDRNOTAVAIL错误的方法
问题原因
EADDRNOTAVAIL错误说明你指定的公网IP并非当前VPS网卡上实际绑定的有效地址,或存在权限/网络配置层面的问题。
具体解决方案
1. 确认VPS实际绑定的IP地址
先通过命令查看服务器网卡上的所有IP:
ip addr show
在输出中找到类似inet x.x.x.x/24的条目,确认你填写的my_public_ip是否在其中。如果VPS采用NAT网络配置(比如部分云服务商的实例),服务器内部只会显示内网IP,公网IP是通过服务商网关映射的,这种情况下无法直接绑定公网IP。
2. 修改监听地址为0.0.0.0
将代码中的监听地址改为0.0.0.0,服务器会自动监听所有可用网卡的地址,外部可通过公网IP正常访问:
const http = require('http'); const server = http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.end('Hello, World!\n'); }); const ipAddress = '0.0.0.0'; // 监听所有网卡地址 const port = 80; server.listen(port, ipAddress, () => { console.log(`Server running at http://${ipAddress}:${port}/`); });
3. 检查端口80的权限
端口80属于特权端口(1-1024),非root用户运行Node.js时默认没有绑定权限。如果需要用非root用户运行,可执行以下命令给Node添加绑定特权端口的权限:
sudo setcap 'cap_net_bind_service=+ep' $(which node)
或者直接用sudo node your-server-file.js运行服务器。
4. 验证网络连通性
修改后重启服务器,在本地用curl http://your-public-ip:80测试,或直接在浏览器访问,确认是否能正常返回内容。
内容的提问来源于stack exchange,提问作者Owl0223
相关产品推荐
相关产品推荐

