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

如何配置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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:45:00