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

jrd*_*oko 12 client ruby-on-rails ip-address request actioncontroller

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

def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end
Run Code Online (Sandbox Code Playgroud)

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

ind*_*ect 13

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

我编写了测试我博客上最流行的Ruby应用服务器的结果,您可能想要查看重复的标头是否对您的应用程序很重要.


tad*_*man 9

似乎是按原样remote_addr返回REMOTE_ADDR环境变量的值,同时remote_ip也会根据变量HTTP_X_FORWARDED_FORHTTP_CLIENT_IP变量的存在来调整它,例如您通过代理转发客户端时可能会有的变量.

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