node 获取客户端真是ip

7 篇文章 0 订阅

1、X-Real-IP

nodejs服务nginx做的反向代理,之前一直用从请求头里边字段X-Real-IP获取真实ip,nginx配置如下

location / {

    proxy_set_header X-Real-IP $remote_addr;

}

        X-Real-IP,没有相关标准,比如Nginx,一般会是与之直接连接的客户端IP,如果经过多级代理,最后拿到的真实ip是与之直接相连的上级代理的ip,而不是客户端得真实ip。

2、X-Forwarded-For

        一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中。

       例如:来自4.4.4.4的一个请求,header包含这样一行:

X-Forwarded-For:1.1.1.1, 2.2.2.2, 3.3.3.3

        代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理。

Nginx配置如下:

location / {

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

3、X-Forwarded-For和X-Real-IP的区别

    1)X-Forwarded-For记录的是经过的所有代理ip,X-Real-IP记录上一级的ip

    2)当只有一级代理的时候,两者的值是相等的

    3)通常情况下使用X-Forwarded-For获取


node.js

1  获取客户端的真实IP

let getClientIp = function (req) {
    return req.headers['x-forwarded-for'] ||
        req.connection.remoteAddress ||
        req.socket.remoteAddress ||
        req.connection.socket.remoteAddress || '';
};
 
console.log(getClientIp(req));
let ip = getClientIp(req).match(/\d+.\d+.\d+.\d+/);
console.log(ip);
ip = ip ? ip.join('.') : null;
console.log(ip);
2:获取客户端的域名
let domain = req.headers['referer'].match(/^(\w+:\/\/)?([^\/]+)/i);
domain = domain ? domain[2].split(':')[0].split('.').slice(-2).join('.') : null;
注意点:获取客户端的ip老版本有一个req.headers['X-Real-IP'] 方法,该方法有时候会获取不到或者不支持,建议不去添加到获取ip方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值