【发布时间】:2018-12-07 10:49:02
【问题描述】:
我刚刚遇到了一个任务,我需要获取正在访问我们服务器上的 REST api 的远程客户端的本地 IP 地址,我没有使用任何负载均衡器(因为我现在对此一无所知),我的应用程序在我的电脑上本地运行,我使用工具 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 地址,而不是本地地址。基本上,我的需要是跟踪 ping 我们的 API 的不同用户的数量,并且我不能将相同的 IP 地址作为两个不同的人从同一网络请求 API。
另外,请向我推荐一些关于为开发人员使用 Web 代理和 Web 网络的入门级读物。 谢谢你,祝福你。
【问题讨论】: