我刚刚开始使用CloudFlare,但仍然存在获取CloudFlare代理IP地址而不是访问者地址的问题. CloudFlare有很多
solutions,但我没有看到任何Rails.
我正在使用Rails 3.2.17.
看起来如果我将custom_proxies参数设置为包含所有CloudFlare’s IP ranges(以及所有标准本地和私有范围)的正确正则表达式初始化Actiondispatch :: RemoteIp,它可能会解决我的问题.
问题:
1)这是正确的方法吗?
CloudFlare有一大堆IP范围,所有这些都需要转换为正则表达式.这些范围可能会在未来发生变化,即使CloudFlare说它们并不常见,而且我可能不知道它似乎有点脆弱.
2)如何使用custom_proxies参数初始化Actiondispatch :: RemoteIP?
解决方法
您可以使用
the remote_ip_proxy_scrubber gem中的Rack中间件来确保您的Rails应用程序忽略来自可信代理服务器(如CloudFlare)的IP地址.
首先,将gem添加到Gemfile中,然后捆绑安装
gem 'remote_ip_proxy_scrubber'
现在,您需要更新的CloudFlare IP地址列表:https://www.cloudflare.com/ips-v4
使用CloudFlare IP列表,将以下内容添加到config / application.rb或conifg / environments / * .rb
# Make sure CloudFlare IP addresses are # removed from the X-Forwarded-For header # before our app sees them config.middleware.insert_before(Rails::Rack::Logger,RemoteIpProxyScrubber.filter_middleware,%w{ 199.27.128.0/21 173.245.48.0/20 103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 141.101.64.0/18 108.162.192.0/18 190.93.240.0/20 188.114.96.0/20 197.234.240.0/22 198.41.128.0/17 162.158.0.0/15 104.16.0.0/12 172.64.0.0/13 }) # Make sure the customer's real IP address (remote_ip) # is used in our Rails logs. config.middleware.insert_before(Rails::Rack::Logger,RemoteIpProxyScrubber.patched_logger) config.middleware.delete(Rails::Rack::Logger)
到目前为止,跟踪对CloudFlare IP列表的更改对我们公司来说并没有太大问题.
>作为CloudFlare客户,我们在收到CloudFlare最新添加的IP地址之前收到了一封电子邮件
>当CloudFlare添加新的IP地址时,您还可以使用an IFTTT recipe来获取电子邮件通知.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。