gpt4 book ai didi

ruby-on-rails - 使用 CloudFlare、Heroku 和 RoR 时如何设置真实 IP 地址?

转载 作者:行者123 更新时间:2023-12-05 01:04:21 24 4
gpt4 key购买 nike

我最近才开始使用 CloudFlare,但仍然有一个挥之不去的问题,即获取 CloudFlare 的代理 IP 地址而不是我的访问者的地址。 CloudFlare 有很多 solutions为此,但我还没有看到 Rails 的任何内容。

我正在使用 Rails 3.2.17。

看起来如果我初始化 ActionDispatch::RemoteIp 并将 custom_proxies 参数设置为包含所有 CloudFlare's IP ranges 的正确正则表达式(连同所有标准的本地和私有(private)范围),它可能会解决我的问题。

问题:

1)这是正确的方法吗?

CloudFlare 有大量的 IP 范围,都需要转换为正则表达式。这些范围在 future 可能会发生变化,尽管 CloudFlare 说它们不会经常发生变化,而且我可能不知道,所以它看起来有点脆弱。

2) 如何使用 custom_proxies 参数初始化 ActionDispatch::RemoteIP?

最佳答案

您可以使用来自 the remote_ip_proxy_scrubber gem 的 Rack 中间件确保您的 Rails 应用程序忽略来自 CloudFlare 等受信任代理服务器的 IP 地址。

首先,将 gem 添加到您的 Gemfile 中,然后添加 bundle install

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 客户,我们在他们最近添加的 IP 地址之前收到了一封来自 CloudFlare 的电子邮件
  • 还有an IFTTT recipe当 CloudFlare 添加新 IP 地址时,您可以使用它来获取电子邮件通知。
  • 关于ruby-on-rails - 使用 CloudFlare、Heroku 和 RoR 时如何设置真实 IP 地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416239/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com