Ruby on Rails:如何获取客户端IP地址

3

我进行了很多搜索,但是找不到解决方案。我尝试过:

Rails.logger.error request.remote_ip
Rails.logger.error request.env["REMOTE_ADDR"]

但是,结果有些奇怪:10.130.150.25410.130.150.251

我使用手机LTE/4G网络进行测试,总是得到10.130.247.251,这是一个A类保留的私有网络IP地址。

我还尝试了:

Rails.logger.error request.env["HTTP_X_FORWARDED_FOR"]
Rails.logger.error request.env["HTTP_X_REAL_IP"]
Rails.logger.error request.env["HTTP_X_CLUSTER_CLIENT_IP"]

但是它们为我提供了空字符串。

当我使用手机并指向touch.whatsmyip.org时,它会给我一个公共IP地址172.56.9.89

我们使用HTTPS SSL终止和负载均衡器,可能看起来像“获取负载均衡器(ELB)后面的远程主机客户端IP地址"。

如何获取客户端IP地址?如果客户端在代理后面,那没问题,那么代理IP地址对我也很好。

我正在使用Apache和Passenger来提供应用程序。

"request.remote_ip"是一个类似的问题。


你比较过 request.remote_iprequest.ip 的结果吗? - Brandon Buck
1
页面右侧的“相关链接”是您的好朋友。PHP、Net和Ruby的技术和问题都是相同的。代理、NAT等可能会隐藏用户真实IP地址。人们可以反弹到其他计算机上或使用类似TOR的系统,因此获取准确信息可能会很困难。 - the Tin Man
@theTinMan,我在发布我的问题之前搜索了很多stackoverflow帖子 :-) 请看我的答案。 - Peter Lee
1
在编写包含链接的文本时,建议您使用更具指示性的内容来编写链接文本。说“这个”对于阅读文本的任何人都没有真正的帮助,因为“这个”并没有告诉他们链接指向什么。有关更多信息,请参见W3的页面“不要使用'点击此处'作为链接文本”和“Web内容无障碍性指南1.0的HTML技术”中的“6.1链接文本”一节。 - the Tin Man
2个回答

5

事实证明,我们的IT没有配置负载均衡器以传递它。一旦他完成了配置,它就可以正常工作了。 request.env["HTTP_X_FORWARDED_FOR"]request.remote_ip 都可以使用。


2
我相信你已经意识到了,如果你还没有,现在你应该知道了,但是再次强调一下:除非你知道服务器的访问者很可能不会欺骗(即企业内部服务),否则不要将此用于任何公共服务,因为它不可靠,所以不要让任何逻辑依赖于它。 - Brandon Buck
你能分享一下你的服务器配置更改吗? - Tim Kozak

-1
希望这对你有所帮助。

env['action_dispatch.remote_ip'].calculate_ip


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接