Rails - request.env [' HTTP_X_FORWARDED_FOR']和request.remote_ip之间的区别

时间:2014-07-30 11:56:13

标签: ruby-on-rails ruby

我正在对现有的RoR应用程序添加一些更改,并发现request.env['HTTP_X_FORWARDED_FOR']已返回nil。我将其更改为request.remote_ip并获得了客户端的正确IP地址。

为什么request.remote_ip会在request.env['HTTP_X_FORWARDED_FOR']返回nil时返回IP?它们之间的区别是什么?如何使request.env['HTTP_X_FORWARDED_FOR']工作以及我应该使用哪一个(最佳实践)?

1 个答案:

答案 0 :(得分:4)

通常,您应该使用request.remote_ip。这是Rails引入的一种方法,它尝试使用各种方法收集连接的实际远程IP,包括在适当的时候评估request.env['HTTP_X_FORWARDED_FOR']

最后,request.remote_ip返回的IP在ActionDispatch::RemoteIp middleware中计算。这比尝试自己收集IP更通用,因为它考虑了代理阶段,可以设置各种HTTP头。