Ruby应用程序认为客户端的IP地址始终相同

时间:2014-10-09 11:03:27

标签: heroku ip sinatra

Sinatra app。

<%= request.ip %>
如果从本地服务器查看,

会提供 127.0.0.1 IP地址 如果从Heroku服务器查看,无论来自哪个设备,都会提供 83.245.226.68 IP地址。
所以我猜它会返回服务器的IP地址而不是客户端的IP地址。我如何找出客户的IP地址呢?我是否误解了 request.ip 方法?

1 个答案:

答案 0 :(得分:4)

当机架HTTP服务器前面的HTTP服务器(例如用于负载平衡,ssl等)未将客户端IP地址转发到机架HTTP服务器时,会发生这种情况。在这种情况下,您将获得HTTP Server的IP地址。

这可以在Nginx和Apache等HTTP服务器上配置,并在request.ip中获取客户端IP地址。

据我所知,Heroku的做法是客户端IP地址在一个名为&#34; x-forwarded-for&#34;的标题中,这是一个以逗号分隔的IP地址列表,最后一个element是客户端ip。

屈:

env['HTTP_X_FORWARDED_FOR'].split(',').last

滑轨:

request.headers['x-forwarded-for'].split(',').last