Sinatra 应用程序。
<%= request.ip %>
Run Code Online (Sandbox Code Playgroud)
如果从本地服务器查看,会给出127.0.0.1 IP 地址。如果从 Heroku 服务器查看,无论来自哪个设备,
都会给出83.245.226.68 IP 地址。
所以我猜它返回服务器的 IP 地址而不是客户端的。那么我如何找出客户端的IP地址呢?我误解了request.ip方法吗?
当 Rack HTTP Server 前面的 HTTP Server(例如用于负载平衡、ssl 等)没有将客户端 IP 地址转发到 Rack HTTP Server 时,就会发生这种情况。在这种情况下,您将获得 HTTP 服务器的 IP 地址。
这可以在像 Nginx 和 Apache 这样的 HTTP 服务器上配置,你可以在request.ip
.
据我所知,Heroku 的处理方式是客户端 IP 地址位于名为“x-forwarded-for”的标头中,这是一个逗号分隔的 IP 地址列表,最后一个元素是客户端 IP。
辛纳特拉:
env['HTTP_X_FORWARDED_FOR'].split(',').last
Run Code Online (Sandbox Code Playgroud)
导轨:
request.headers['x-forwarded-for'].split(',').last
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
607 次 |
最近记录: |