0

我有一个问题,我似乎无法访问 Cloudflare 在代理请求时传递客户端源 IP 的标头。

标题应HTTP_CF_CONNECTING_IP根据 Cloudflare 的文档,我的网站托管在 Heroku 上。

我有以下机架攻击设置,但即使在生产环境HTTP_CF_CONNECTING_IP中也根本没有记录。

class Rack::Attack
  Rack::Attack.cache.store = ActiveSupport::Cache::MemoryStore.new

  class Request < ::Rack::Request
    def remote_ip      
      @remote_ip ||= (env['HTTP_CF_CONNECTING_IP'] || env['action_dispatch.remote_ip'] || ip).to_s    
    end
  end

  track('Log all requests') do |req|
    puts req.ip # returns an IP
    puts req.env['action_dispatch.remote_ip'] # returns the same IP as req.ip
    puts req.env['HTTP_CF_CONNECTING_IP'] # doesn't show anything
    req.remote_ip
  end
end

我正在使用 Cloudflare 的免费版本,并想知道这是否有任何区别,但目前它无法使用 Rack Attack,因为我似乎只是阻止了所有人。

任何帮助将非常感激。

4

1 回答 1

0

throttling all在一个具有完全相同配置的项目(即 Heroku、CloudFlare 和 RackAttack)上遇到了这个问题。

问题是所有请求都是通过 CloudFlare 代理的,因此达到了最大限制并受到限制。

我使用了您在问题中发布的相同remote_ip方法,但不知何故我能够remote_ipenv['HTTP_CF_CONNECTING_IP']

我参加了高级 CF 计划(如果这有帮助,即使我也不是)。如果问题仍然存在,您可以参考此博客恢复原始访问者 IP 。

我还发现这个博客真的很有帮助How to Remittance DDoS using Rack::Attack

于 2021-09-26T13:51:10.983 回答