2013-10-29 123 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

相關問題