因此,我尝试获取Heroku上我的应用程序的访问者的IP地址,我为此使用了API,该API在本地运行良好,但当我在Heroku上部署应用程序时,我获取了Heroku服务器的IP,它是一个express.js应用程序,并使用此设置
app.set('trust proxy', true);
我见过很多解决这个问题的方法,但没有一个对我有效。
当我使用
var ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress;
我得到这个结果
clientIp: '::1',
3条答案
按热度按时间slwdgvem1#
首先,您必须安装此模块
npm i ipware
请注意,结果是以对象形式出现的,获取ipaddress应该很简单,就像
所以我想这应该会有帮助。
vpfxa7rd2#
但有时您可以通过此**req.headers ['x-forwarded-for']**获得多个IP地址
你用基本的if else控制。
或者,您可以使用这个方法,并在答案的顶部替换为req.headers ['x-forwarded-for']
vxf3dgd43#
我将假设操作员正在使用此API -http://geo.ipify.org/api/v2/country
API实际上在本地和生产(Heroku上)中都运行良好。真实的的问题或为什么显示Heroku服务器的IP地址而不是访问者的IP地址的原因是,正如@SuperStormer所提到的,您现在是从Heroku服务器调用API。
正如Op所指出的,在express.js中有不同的方法来获得用户的IP地址。
我查了本地和Heroku上这三个人的使用情况
这是Heroku日志x1c 0d1x上的内容
**PS:**信任代理已设置为true,这就是
req.ip
与req.headers.["x-forwarded-for"]
具有相同值的原因。由
req.connection.remoteAddress
返回的IP地址是以IPv6表示法表示的IPv4地址,并且由于它不符合先前的值,因此它证明了在客户端和服务器之间存在代理的事实。当您在本地主机上时:访问req对象返回的IP地址通常为
::1
。::1
实际上是IP地址,是本地主机的IPV6表示法。IPv4中的环回地址为127.0.01。在IPv6中,环回地址为0:0:0:0:0:0:0:1或::1。您可以阅读此how-to-guide以了解有关获取IP地址的不同方法的更多信息。