我正在对现有的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']
工作以及我应该使用哪一个(最佳实践)?
答案 0 :(得分:4)
通常,您应该使用request.remote_ip
。这是Rails引入的一种方法,它尝试使用各种方法收集连接的实际远程IP,包括在适当的时候评估request.env['HTTP_X_FORWARDED_FOR']
。
最后,request.remote_ip
返回的IP在ActionDispatch::RemoteIp middleware中计算。这比尝试自己收集IP更通用,因为它考虑了代理阶段,可以设置各种HTTP头。