📅  最后修改于: 2023-12-03 15:14:57.411000             🧑  作者: Mango
在使用 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 地址的请求。使用 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 地址。例如,如果你的应用程序在 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 地址。在这种情况下,您可以使用 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 地址。