2026/10/11 4:24:03

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

nodejs 获取客服端ip,以及获取ip一直都是127.0.0.1的问题 个人博客vue3 nodejs mysql )http://36.151.145.67:30000/一、问题描述在做登录日志的时候想要获取客户端的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如下图三、附上我的获取的代码关键如下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 });