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

Node.js项目中无法获取正确客户端IP的问题排查求助

解决Node.js云部署环境下获取客户端IP显示127.0.0.1的问题
  • 问题本质:你部署的云平台几乎都用了反向代理(比如Nginx、Cloudflare),你的Node.js服务实际是和代理服务器建立连接,所以req.socket.remoteAddress拿到的是代理服务器的本地IP(也就是127.0.0.1),而非真实客户端IP。

  • 修复方法:

    1. 云平台的反向代理会把真实客户端IP放在请求头里,常用的是X-Forwarded-For或X-Real-IP,直接从这些头里取值即可。
    2. 修改中间件代码,优先读取代理传递的IP:
      async function getUserIp(req, res, next) {
        // 优先取X-Forwarded-For,多层代理时第一个值是真实IP
        const clientIp = (req.headers['x-forwarded-for'] || '').split(',')[0].trim() 
                         || req.headers['x-real-ip'] 
                         || req.socket.remoteAddress;
        console.log(clientIp);
        next();
      }
      
    3. 确认云平台配置:部分云平台需要手动开启传递真实IP的设置,比如用Nginx做代理时,要在配置里加proxy_set_header X-Forwarded-For $remote_addr;,像Cloudflare这类CDN默认会自动传递相关请求头。
  • 补充说明:req.socket.remoteAddress只能获取直接连接到Node.js服务的对象IP,当有反向代理时,这个对象是代理服务器,所以拿到的是127.0.0.1,这不是代码疏漏,是云平台的代理环境导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:20:25