📜  Express.js req.ips 属性(1)

📅  最后修改于: 2023-12-03 15:14:57.411000             🧑  作者: Mango

Express.js req.ips 属性

在使用 Express.js 构建 Web 应用程序时,req.ips 属性是指从客户端到达服务器的所有中间件代理的 IP 地址数组。本文将介绍如何使用 req.ips 属性以及它的一些常见用法。

使用方法

在 Express.js 中,我们可以通过在路由处理程序中使用 req.ips 属性来获取客户端的所有 IP 地址。例如:

app.get('/example', function(req, res) {
  console.log(req.ips);
  res.send('Hello World!');
});

这将输出客户端请求中的所有中间件代理的 IP 地址。注意,如果客户端没有使用代理,则数组中只包含唯一的 IP 地址 - 客户端自己的IP。

常见用法
IP 验证

在某些情况下,您可能需要验证来自特定 IP 地址的请求。使用 req.ips 属性,您可以验证客户端是否使用特定的代理。例如,以下代码段将拒绝任何不使用代理的请求:

app.get('/example', function(req, res) {
  if (!req.ips || !req.ips.length) {
    return res.status(403).send('Forbidden');
  }
  res.send('Hello World!');
});
获取最后一个中间件代理的 IP 地址

在某些情况下,您可能希望获取客户端的最后一个中间件代理的 IP 地址。例如,如果你的应用程序在 AWS ELB 后面运行,那么你可以从 req.ips 数组中获取该 IP:

app.get('/example', function(req, res) {
  if (req.ips && req.ips.length) {
    const lastProxyIp = req.ips[req.ips.length - 1];
    console.log(lastProxyIp);
  }
  res.send('Hello World!');
});

现在,您可以使用 lastProxyIp 变量来执行任何您需要的操作。

获取客户端真实 IP 地址

有时,您可能需要获取客户端的真实 IP 地址,而不是所有中间代理的 IP 地址。在这种情况下,您可以使用 req.ip 属性。例如:

app.get('/example', function(req, res) {
  const realIp = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
  console.log(realIp);
  res.send('Hello World!');
});

在这个例子中,我们从 req.headers['x-forwarded-for'] 或 req.connection.remoteAddress 中获取客户端的真实 IP 地址。

结论

Express.js req.ips 属性允许您获取客户端从代理到达服务器的所有 IP 地址。使用它,您可以验证请求是否来自特定 IP 地址,获取客户端的最后一个中间件代理的 IP 地址或获取客户端的真实 IP 地址。