2013-10-29 97 views
2

我搜索了很多,但我找不到解决方案。我想:Ruby on Rails:如何获取客户端IP地址

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时,它给我:172.56.9.89,这是一个公共IP地址。

我们使用HTTPS SSL终端和负载均衡器,它可能看起来像“Get Remote Host Client IP Behind Load Balancers (ELB)”。

如何获取客户端IP地址?如果客户端在代理服务器后面,那很好,那么代理IP地址对我来说也是很好的。

我使用Apache和Passenger来为应用程序提供服务。

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

+0

你相比'request.remote_ip'到'request.ip'的结果吗? –

+1

页面右侧的“相关”链接是你的朋友。这些技术和问题对于PHP,Net和Ruby来说都是一样的。代理,NAT等可以掩盖/隐藏用户真正在使用的IP。人们可以反弹其他盒子或使用[TOR](https://www.torproject.org/)类似的系统,因此准确地获得某些东西可能很困难。 –

+0

@theTinMan,我在发布我的文章之前搜索了很多stackoverflow文章:-)查看我自己的答案。 –

回答

4

事实证明,我们的IT尚未配置为通过负载均衡器传递它。一旦他完成配置,它就可以工作。 request.env["HTTP_X_FORWARDED_FOR"]request.remote_ip都适用。

+2

我确定你知道,如果你不是你应该现在,但只是再次迭代:使用这种任何类型的公共服务是不可靠的,所以不要让任何类型的逻辑取决于除非你知道服务器的访问者最有可能不是欺骗(即局间服务)。 –

+0

您能分享您的服务器配置更改吗? – comonitos

0

希望这将有助于

env['action_dispatch.remote_ip'].calculate_ip

相关问题