【工具方法】Nodejs获取用户ip
【工具方法】Nodejs获取用户ip
直接上代码:
var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
【工具方法】Node.js 获取用户 IP
在处理 Web 请求时,经常需要获取客户端的 IP 地址。这在日志记录、安全检查以及地理位置相关的应用中尤为重要。在 Node.js 中,可以通过请求对象(req
)来获取用户的 IP 地址。
示例代码
const express = require('express');
const app = express();
app.get('/', (req, res) => {
// 获取用户 IP 地址
let ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
// 输出 IP 地址
console.log(`User IP: ${ip}`);
// 返回响应
res.send(`Your IP address is ${ip}`);
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
req.header('x-forwarded-for')
:- 这个字段通常由代理服务器(如 Nginx 或 Cloudflare)添加到 HTTP 头中。
- 它包含了原始客户端的 IP 地址,中间可能经过了多个代理服务器。
- 如果请求经过了代理服务器,那么
x-forwarded-for
字段会包含一个以逗号分隔的列表,其中第一个 IP 地址通常是客户端的真实 IP 地址。
-
req.connection.remoteAddress
:- 这个属性直接返回客户端的 IP 地址。
- 如果没有经过代理服务器,或者代理服务器没有设置
x-forwarded-for
字段,那么这个属性将提供客户端的 IP 地址。 - 注意:如果请求经过了代理服务器,那么这个值可能是代理服务器的 IP 地址。
通过上述代码,我们可以确保在大多数情况下正确地获取用户的 IP 地址。如果你的应用部署在反向代理后面(例如 Nginx 或 Apache),建议使用 x-forwarded-for
字段,因为它更准确地反映了客户端的真实 IP 地址。
适合上 Wiki, 有时间的话应该开始码 Wiki 了
我怎么获取到的都是服务端的IP,是不是跟用了nginx反向有关?
.replace(’:remote-addr’, req.headers[‘x-forwarded-for’] || req.connection.remoteAddress)
我也遇到过类似的问题,nginx反向代理后,需要改一下配置 http://blog.fens.me/nodejs-nginx-log4js/
:-)
在Node.js中获取用户的IP地址可以通过检查请求头中的x-forwarded-for
字段来实现。这个字段通常由代理服务器(如Nginx、Apache)添加,以指示原始客户端的IP地址。如果没有使用代理服务器,或者请求直接来自客户端,可以直接从req.connection.remoteAddress
获取IP地址。
以下是一个简单的示例代码:
const http = require('http');
const server = http.createServer((req, res) => {
let ip = req.headers['x-forwarded-for'] ||
req.connection.remoteAddress;
// 去除IPv6的方括号
if (ip.includes('::ffff:')) {
ip = ip.replace('::ffff:', '');
}
console.log(`User IP: ${ip}`);
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('IP address received');
});
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
这段代码创建了一个HTTP服务器,当接收到请求时,它会尝试从req.headers['x-forwarded-for']
获取IP地址,如果该字段不存在,则从req.connection.remoteAddress
获取。由于某些情况下(例如通过IPv4-mapped IPv6地址),返回的IP地址可能包含额外的字符(如::ffff:
),因此我们还添加了一行代码来处理这种情况。最后,服务器将IP地址记录到控制台,并向客户端发送一个简单的响应。
如果你的应用部署在支持HTTP/1.1协议的环境中,建议优先检查x-forwarded-for
字段,因为这个字段更准确地反映了客户端的真实IP地址。