我刚遇到一个任务,我需要获取正在访问服务器上REST api的远程客户端的本地ip地址,我没有使用任何负载平衡器(因为目前我对此一无所知),我的应用程序在我的PC上本地运行,我正在使用ngrok工具将其公开到互联网,该工具托管我的应用程序并使之可以通过互联网访问。我将与您分享到目前为止的工作,但这不能满足我的需要,因为它仅获取远程客户端的公共IP地址,这意味着,如果两个不同的用户正在同一网络上访问API,则使用此代码,他们的ip地址也会被报告,
RedisRouter.post('/incrementvisit', async (req: Request, res: Response, next: NextFunction) => {
try {
console.log('req.ip', req.ip);
console.log('request.connection.remoteAddress==================================', req.connection.remoteAddress);
var ip = req.headers['x-forwarded-for'];
console.log('ip from headers -------------->', ip);
console.log('api after trimming', ip);
res.send(await rs.visitCounter(req.body.name,ip));
} catch (error) {
console.log(error);
next(error);
}
});
`对于所有从同一网络请求api的所有用户,这总是给我相同的IP地址,这是他们的公共IP地址,而不是本地的IP地址。基本上,我需要跟踪对我们的API执行ping操作的不同用户的数量,并且我无法使用相同的IP地址来说明从同一网络请求API的两个不同的人。
此外,请为我提供一些有关使用Web代理和Web网络为开发人员的良好入门指南。 谢谢,祝你幸福。
答案 0 :(得分:0)
我不确定ngrok服务器正在运行,但是您是否尝试过:
var ip = req.headers["x-real-ip"]