我一直对返回公共IP地址的方法持怀疑态度。除非您使用诸如whatismyip.com之类的外部服务,否则它们通常会出现故障。
Rails remote_ip方法在100%的时间内确定外部公共IP的可靠性如何? https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/middleware/remote_ip.rb
我刚刚发现我遇到的问题是CloudFlare,它有CF-Connecting-IP
的不同标题。看来我必须通过(headers["CF-Connecting-IP"] || remote_ip)
的某些方式来解决这个问题,以便克服这种特殊情况。
所以看来要么我需要修补补丁remote_ip
,要么考虑到这一点而不会在任何地方干掉我的代码。
答案 0 :(得分:2)
我是remote_ip
当前实现的作者,我不得不重做它以正确处理X-Forwarded-For
(特别是如果请求包含多个X-Forwarded-For
标头)。听起来您可能想要提交一个pull请求,使该方法也检查CF-Connecting-IP
标头。最后,您可能需要更改在生产中使用的应用服务器,因为其中一些可以ignore repeated request headers。
答案 1 :(得分:0)
remote_ip来自HTTP请求标头,因此任何知道如何更改它的人都可以更改remote_ip地址。也可以以这种方式使用代理和更改地址。您可以将它用于地理位置或类似的东西,但我认为它不适合黑名单或白名单。