【问题标题】:Rails ActionController: Difference between request.remote_ip and request.remote_addrRails ActionController:request.remote_ip 和 request.remote_addr 之间的区别
【发布时间】:2011-05-04 02:01:29
【问题描述】:
在ActionController源码中,本地请求定义如下:
def local_request? #:doc:
request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end
在我的应用程序中,如果请求来自特定 IP 范围,我想使用不同的逻辑。 request.remote_addr和request.remote_ip有什么区别,应该用哪一个?
【问题讨论】:
标签:
ruby-on-rails
client
request
ip-address
actioncontroller
【解决方案1】:
我是remote_ip 当前实现的作者,它确实包括检查 IP 欺骗攻击和正确处理多个 X-Forwarded-For 标头。但是有一个很大的警告:只有一些 Ruby Web 服务器支持多个标头,因此该值仍然可能是错误的。
我写了测试最流行的 Ruby 应用服务器 on my blog 的结果,您可能想看看重复的标头是否对您的应用程序很重要。
【解决方案2】:
似乎remote_addr 按原样返回REMOTE_ADDR 环境变量的值,而remote_ip 也会根据HTTP_X_FORWARDED_FOR 和HTTP_CLIENT_IP 变量的存在来调整它,例如,当您的客户端通过代理转发时,您可能会遇到这种情况。
对local_request? 的双重检查只是一种确定用户来自本地计算机的方法,而不是简单地通过本地代理从其他地方转发。