如何配置Node.js服务器允许指定IP访问,实现跨设备连接?
解决方案
第一步:实现公网可访问
- 先修复基础配置问题:你当前代码
listen(3000)默认仅绑定本地回环地址127.0.0.1,所以只能本地访问。要改成listen(3000, '0.0.0.0')让服务器监听本机所有网卡接口。另外注意你现有代码的控制台打印端口有误,实际监听的是3000不是300。 - 网络层配置:
- 若你的服务器有固定公网IP,直接在路由器内做端口映射,把本机3000端口映射到公网IP的对应端口,同时开放服务器防火墙3000端口的入站规则即可。
- 若无固定公网IP,可使用内网穿透工具,将本地3000端口映射到穿透工具分配的公网访问地址。
第二步:配置指定IP白名单访问控制
你可以直接在代码层加入IP校验逻辑,修改后的完整代码如下:
var http = require("http"); // 在这里填入允许访问的客户端公网IP列表 const ALLOWED_IPS = ['114.xxx.xxx.xxx', '123.xxx.xxx.xxx']; http.createServer(function (req, res) { // 获取客户端真实IP,若使用了反向代理/内网穿透,需从代理层设置的X-Forwarded-For请求头取 const clientIp = req.headers['x-forwarded-for'] || req.socket.remoteAddress; // 兼容IPv6格式封装的IPv4地址 const formattedIp = clientIp.replace(/^::ffff:/, ''); // IP不在白名单内直接返回403拒绝访问 if (!ALLOWED_IPS.includes(formattedIp)) { res.writeHead(403, {'Content-Type': 'text/plain'}); res.end('Access Denied'); return; } res.writeHead(200, {'Content-Type': 'text/html'}); res.end('<html><body><h1>Hello World</h1></body></html>'); }).listen(3000, '0.0.0.0'); console.log('Server running on port 3000.')
- 额外优化建议:也可以直接在服务器防火墙、路由器层面配置IP白名单规则,安全性比代码层校验更高。如果使用代理服务,需确保
X-Forwarded-For头由代理层可信设置,避免被恶意伪造IP绕过校验。
内容的提问来源于stack exchange,提问作者user10855726
相关产品推荐
相关产品推荐

