【工具方法】Nodejs获取用户ip

【工具方法】Nodejs获取用户ip

直接上代码:

var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;
6 回复

【工具方法】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');
});

解释

  1. req.header('x-forwarded-for'):

    • 这个字段通常由代理服务器(如 Nginx 或 Cloudflare)添加到 HTTP 头中。
    • 它包含了原始客户端的 IP 地址,中间可能经过了多个代理服务器。
    • 如果请求经过了代理服务器,那么 x-forwarded-for 字段会包含一个以逗号分隔的列表,其中第一个 IP 地址通常是客户端的真实 IP 地址。
  2. 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地址。

回到顶部