nodejs nginx代理之后如何获得客户ip地址和客户归属地
在Node.js中,当使用Nginx作为反向代理时,客户端的真实IP地址可能会被Nginx的IP地址所替代。为了获取客户端的真实IP地址,你需要在Nginx配置中设置X-Real-IP或X-Forwarded-For头,然后在Node.js中读取这些头信息。
首先,在Nginx配置文件中,确保有以下设置
location / {
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
然后,在Node.js中,你可以使用req.headers来获取这些头信息,归属地使用的是百度IP查询:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
// 用于存储 IP 地址及其最后访问时间
const realIpstr: any = req.headers['x-real-ip'] || req.headers['x-forwarded-for'] || req.ip
const realIp = realIpstr.split(',')[0].trim();
//用IP地址获取用户的归属地
const BuDuUrl = `http://opendata.baidu.com/api.php?query=${IP}&resource_id=6006&oe=utf8`
const res = await handleFetch(BuDuUrl)
const location = res.data[0]?.location
//保存到数据库等逻辑
....
});
app.listen(4000, () => {
console.log(`服务器运行在4000端口`);
});
效果如图: