gpt4 book ai didi

ruby-on-rails - 在 Rails 4 中,如何为 RemoteIp 配置可信代理列表?

转载 作者:行者123 更新时间:2023-12-04 14:44:01 25 4
gpt4 key购买 nike

我的应用程序记录了每个登录用户的 IP 地址,但我注意到它记录的是负载均衡器的 IP 地址,而不是实际的客户端 IP。研究这个问题,我相信这是因为我们的负载均衡器使用可公开路由的 IP 地址,并且 Rails 忽略了 X-Forwarded-For header ,假设它被欺骗了。解决方案似乎是将我们的负载均衡器使用的 IP 范围“列入白名单”。

我的问题是,对于 rails 4.1.x,我该怎么做?这是我现在在 config/environments/production.rb 中的内容:

config.action_dispatch.custom_proxies = %r{
^100\.30 | # production environment load balancers
^200\.40 | # dev environment load balancers
}x

我尝试像 remote_ip.rb 中的 TRUSTED_PROXIES 一样格式化它,但它可能应该是一个字符串或一个数组,或者是一个不同格式的正则表达式?非常感谢任何有关细节的帮助。如果您可以建议一个集成测试,以在 future 版本的 Rails 中捕获此配置中断,则额外投票。 :-)

更新

我尝试了多种方法来更新它,并且使用 config.action_dispatch.trusted_proxies 取得了一些成功.这可以防止我的负载平衡器被记录,但将所有 IP 地址记录为“127.0.0.1”,无论它们是内部的还是外部的。在 logs/unicorn.log 中,ip 地址以 [external address, 10.* address, load balancer address] 的形式出现,所以我知道问题出在 rack 或 rails 层,而不是早期的 apache 或 nginx。我还尝试将 TRUSTED_PROXIES 常量替换为不包括 10.* 范围的列表(因为内部用户具有该范围),但没有明显效果。

此时,对于任何具有来自非公共(public) IP 地址的真实用户的应用程序,或者托管在具有外部 IP 地址的负载均衡器的网络环境中的任何应用程序,Rails 4.1.x 似乎都被破坏了。

最佳答案

从 Rails 4.2 开始,您必须以不同的方式定义代理:

config.action_dispatch.trusted_proxies = %w(100.30.0.0/16 200.40.0.0/16).
map { |proxy| IPAddr.new(proxy) }

https://github.com/rails/rails/issues/5223#issuecomment-199082324

关于ruby-on-rails - 在 Rails 4 中,如何为 RemoteIp 配置可信代理列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27846191/

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