☰
nodejs 获取客服端ip,以及获取ip一直都是127.0.0.1的问题
2026/10/11 4:24:02 网站建设 项目流程

个人博客(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 });

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询