Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku Ruby应用程序认为客户端';的IP地址总是相同的_Heroku_Ip_Sinatra - Fatal编程技术网

Heroku Ruby应用程序认为客户端';的IP地址总是相同的

Heroku Ruby应用程序认为客户端';的IP地址总是相同的,heroku,ip,sinatra,Heroku,Ip,Sinatra,Sinatra应用程序 <%= request.ip %> 如果从本地服务器查看,则提供127.0.0.1IP地址。 如果从Heroku服务器查看,无论从哪个设备查看,都会提供83.245.226.68IP地址。 所以我猜它返回的是服务器的IP地址,而不是客户端的。那么,如何确定客户端的IP地址呢?我是否误解了request.ip方法?当机架HTTP服务器前面的HTTP服务器(例如用于负载平衡、ssl等)未将客户端ip地址转发到机架HTTP服务器时,会发生这种情况。在这种情况下

Sinatra应用程序

<%= request.ip %>

如果从本地服务器查看,则提供127.0.0.1IP地址。
如果从Heroku服务器查看,无论从哪个设备查看,都会提供83.245.226.68IP地址。

所以我猜它返回的是服务器的IP地址,而不是客户端的。那么,如何确定客户端的IP地址呢?我是否误解了request.ip方法?

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

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

据我所知,Heroku的做法是,客户端IP地址位于名为“x-forwarded-for”的头中,这是一个以逗号分隔的IP地址列表,最后一个元素是客户端IP

西纳特拉:

env['HTTP_X_FORWARDED_FOR'].split(',').last
轨道:

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

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

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

据我所知,Heroku的做法是,客户端IP地址位于名为“x-forwarded-for”的头中,这是一个以逗号分隔的IP地址列表,最后一个元素是客户端IP

西纳特拉:

env['HTTP_X_FORWARDED_FOR'].split(',').last
轨道:

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

如果在开发人员机器上运行并查看它,它应该显示127.0.0.1。“如果从Heroku服务器查看,无论从哪个设备”-我猜你的意思是当它部署在Heroku服务器上时,无论我们使用哪个本地设备?你在缓存页面吗?@iain,是的,这就是我的意思。不,我不缓存它们。它必须给用户设备的IP,而不是Heroku服务器的IP,对吗?----我看到的ip是83.245.226.68,显然每个人都这么看。将
warn“!!!request.ip={request.ip}”
放入路由,并检查日志。它应该与Heroku展示给你的其他唱片相匹配。如果您都使用相同的WAN地址,这可以解释它。如果您在您的开发机器上运行并查看它,它应该显示127.0.0.1。“如果从Heroku服务器查看,无论从哪个设备”-我猜你的意思是当它部署在Heroku服务器上时,无论我们使用哪个本地设备?你在缓存页面吗?@iain,是的,这就是我的意思。不,我不缓存它们。它必须给用户设备的IP,而不是Heroku服务器的IP,对吗?----我看到的ip是83.245.226.68,显然每个人都这么看。将
warn“!!!request.ip={request.ip}”
放入路由,并检查日志。它应该与Heroku展示给你的其他唱片相匹配。如果您都使用相同的WAN地址,这可以解释。在nginx控制器上,我在哪里可以启用x-forwarded-for代理设置?或者,在通过默认github存储库安装nginx的GCP中,我将如何执行此操作?在nginx控制器上,我可以在哪里启用x-forwarded-for代理设置?或者,在通过默认github存储库安装nginx的GCP中,我将如何实现这一点?