Rails ActionController:request.remote_ip和request.remote_addr之间的区别

时间:2010-11-02 17:30:27

标签: ruby-on-rails client request ip-address actioncontroller

在ActionController源中,本地请求定义如下:

def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end

在我的应用程序中,如果请求来自特定的IP范围,我想使用不同的逻辑。 request.remote_addrrequest.remote_ip之间有什么区别,我应该使用哪一个?

2 个答案:

答案 0 :(得分:13)

我是remote_ip当前实现的作者,其中包括检查IP欺骗攻击以及正确处理多个X-Forwarded-For标头。但是有一个很大的警告:只有一些Ruby Web服务器支持多个标头,因此值仍然可能是错误的。

我编写了测试最流行的Ruby应用服务器on my blog的结果,您可能需要查看重复的标头是否对您的应用程序很重要。

答案 1 :(得分:9)

似乎情况是remote_addr按原样返回REMOTE_ADDR环境变量的值,而remote_ip会根据HTTP_X_FORWARDED_FOR的存在来调整此值还有HTTP_CLIENT_IP个变量,例如您通过代理转发客户端时的变量。

local_request?的双重检查只是确定用户来自本地计算机的一种方式,而不是简单地从其他地方通过本地代理转发。