Ruby on rails RubyonRails-用户IP与实际设备IP不同

Ruby on rails RubyonRails-用户IP与实际设备IP不同,ruby-on-rails,ruby,ip,geocoding,rails-geocoder,Ruby On Rails,Ruby,Ip,Geocoding,Rails Geocoder,我正在heroku服务器上用RubyonRails构建一个站点,根据用户的位置将内容交付给用户。我使用ipinfo_io通过request.env['ipinfo'].ip和request.env['ipinfo'].loc来获取用户的ip和位置 然后我通过ruby geocoder gem对request.env['ipinfo'].loc进行地理编码。我正在使用GoogleAPI对位置进行地理编码 这一切都很好。我遇到的问题是当我提取ip地址时。查看我的家庭设备上的日志和测试,GET请求在与

我正在heroku服务器上用RubyonRails构建一个站点,根据用户的位置将内容交付给用户。我使用ipinfo_io通过
request.env['ipinfo'].ip
request.env['ipinfo'].loc来获取用户的ip和位置
然后我通过ruby geocoder gem对
request.env['ipinfo'].loc
进行地理编码。我正在使用GoogleAPI对位置进行地理编码

这一切都很好。我遇到的问题是当我提取ip地址时。查看我的家庭设备上的日志和测试,GET请求在与我的家庭设备不同的IP地址上完成

我的家庭设备ip将是136.xx.xx.xxx,GET请求ip将是198.xx.xx.xxx,这与我目前所在的位置非常接近。如何设置环境以引入正确的IP

我已将日志与我的正确ip和GET ip放在下面:

info method=GET path="/favicon.ico" host=www.example.com fwd="136.xx.xx.xxx,172.xx.xx.xx" dyno=web.1 connect=1ms service=8ms status=200 bytes=143 protocol=https
INFO -- : Started GET "/" for 198.xx.xx.xx at 2021-04-07 17:49:01 +0000
Rails版本6.0.3.4
ruby 2.6.3版

您尝试过request.remote\u ip吗


不清楚您在问什么,也不清楚“我的家庭设备ip为136.xx.xx.xxx,获取请求ip为198.xx.xx.xxx”是什么意思。你说的是你的内联网IP(网络)还是因特网IP(公共)?您是否正在使用可能导致此问题的VPN?您如何“连接”到应用程序?应用程序是否托管?我们需要更多的细节来了解您实际遇到的情况以及您希望如何解决此问题。要获得准确的地理位置,您应该使用HTML位置API为什么您认为您的家庭IP应该在136.x.x.x范围内?你是怎么决定的?为什么你认为109.x.x.x离你很远?我猜136.x.x.x可能是您的外部IP地址,它是从您的ISP分配给您的路由器的。但您很可能在本地网络内部使用不同的IP范围,该范围从路由器分配到设备。是路由器经常使用的专用网络的保留IP范围。@spickermann 192.168.0.0/16是保留的。198.x.x.x不是私有地址空间。@tadman维基百科的文章告诉我们198.x.x.x的一部分也是为私有网络保留的。这应该可以做到。看到的ip是Heroku的代理或负载平衡器的ip。远程ip应该查看请求头并获得客户端的转发ip。感谢您的建议。我已经试过了,甚至这个助手也没有给我需要的原始IP。基于此,我发现我可以使用
request.env['HTTP\u X\u FORWARDED\u FOR']
来获取正确的原始IP,但现在我不确定如何将其传递到IPInfo以获取位置,或者IPInfo rails gem是否已经有了可以为我提供的功能。我一找到就会提供答案。