nodejs 获取客服端ip,以及获取ip一直都是127.0.0.1的问题

一、问题描述

在做登录日志的时候想要获取客户端的ip, 网上查了一下 通过 req.headers['x-forwarded-for'] || req.connection.remoteAddress; 获取, 结果获取了之后不管是开发环境,还是生产环境获取到的一直都是 127.0.0.1,这是因为在配置Nginx的时候配置了如下框传来的内容, 这样Nginx默认将自己的地址设置为客户端的地址。

二、解决办法

给Nginx配置加上 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 这样才能用 req.headers['x-forwarded-for'] || req.connection.remoteAddress; 获取到真实 ip 如下图

三、附上我的获取的代码

关键如下:

javascript 复制代码
try {
  let ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress || 'Unknown';
  if (ip.includes(':')) {
    ip = ip.includes(':') ? ip.split(':').slice(-1)[0] : ip;
  }
  const city = new IP2Region().search(ip) ? new IP2Region().search(ip).city + new IP2Region().search(ip).isp : '';
  const os = getOS(req.headers['user-agent']);
  const browser = req.headers['user-agent'].split(' ')[0];
  const sql = `INSERT INTO logs (username, ip, city, browser, os, create_time) VALUES (?,?,?,?,?,?)`;
  const params = [user.username, ip, city, browser, os, moment().format('YYYY-MM-DD HH:mm:ss')];
  db.queryAsync(sql, params).then(_ => {
    res.send({
      code: 200,
      msg: '登录成功',
      token
    });
  });
} catch (error) {
  console.log('-------- logs error --------', error);
  res.send({
    code: 200,
    msg: error,
    token
  });
相关推荐
天寒心亦热21 小时前
Ubuntu20.04系统WIFI网络监测及自动重启
linux·运维·服务器
源远流长jerry21 小时前
TCP 性能管理核心:滑动窗口、流量控制与拥塞控制机制解析
运维·服务器·网络
moonsims21 小时前
波士顿动力Auto-Connect-复杂环境下机器人连接解决方案
服务器·无人机
北方的流星1 天前
华为交换机MSTP和VRRP综合应用配置
运维·网络·华为
骇客野人1 天前
Java比较两个list,A中有但B中没有的元素
linux·服务器·windows
long跨境电商1 天前
2026亚马逊新风口:自养号测评系统提前布局,店铺竞争力快人一步
大数据·服务器·安全
宠..1 天前
奇怪的语法错误
运维·服务器·数据库·qt·microsoft
EndingCoder1 天前
数组和元组:处理集合数据
linux·运维·前端·ubuntu·typescript
数据雕塑家1 天前
Linux运维实战:巧用文件操作实现SSH免密登录配置
linux·运维·ssh
天码-行空1 天前
【大数据环境安装指南】HBase单机环境搭建教程
大数据·linux·运维·数据库·hbase