如何在 Rails 2.3.8 中为 https 请求(即安全连接)查找客户端 IP

Posted

技术标签:

【中文标题】如何在 Rails 2.3.8 中为 https 请求(即安全连接)查找客户端 IP【英文标题】:How to find client ip for https request (i.e secured connection) in Rails 2.3.8 【发布时间】:2013-05-11 07:58:48 【问题描述】:

我正在做一个应用程序,我需要在其中找到客户的 IP 地址。我使用 request.remote_ip 来获取客户端的 IP,并获取客户端的公共 IP 地址以进行 http 请求。当它是一个 https 请求时,remote_ip 获取了不同的 ip,比如 10.114.237.132(我认为这是一个私有 ip)而不是公共 ip 地址。我也试过 request.env['REMOTE_ADDR'] 我的问题是如何为 https 请求找到客户端的远程 ip。

【问题讨论】:

@Jesse 那是私人地址 10.114.237.132 在 10.0.0.0 - 10.255.255.255 范围内,这是私人范围。 我认为它的负载均衡器 IP 地址。我不确定。 Dolphin 没错,就是私有IP地址。 Bharath,它可能是您提到的负载平衡器,或者任何内部服务器首先“接收”连接。总有 IP 地址被欺骗的可能性。 【参考方案1】:

如果这是 laod balancer 的 IP,请尝试确定它是否可以为您提供 HTTP 标头来获取客户端 IP。 如果您可以配置它或者它已经证明它,您可以使用此方法Request.headers() 方法检查 HTTP 标头。

您应该寻找的标题是X-Forwarded-For。

【讨论】:

我在中间件中使用了 env['HTTP_X_FORWARDED_FOR'] 来获取客户端 ip 和代理 ip,但它没有返回任何内容。 Paulo Http 标头会有 REMOTE_ADDR 对吗?我想它也会给代理ip。 这将始终取决于负载均衡器是否填充此标头。与 HTTP 代理一样,这取决于代理是否支持或配置为填充标头。您需要查看负载均衡器文档。

以上是关于如何在 Rails 2.3.8 中为 https 请求(即安全连接)查找客户端 IP的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?

如何在 Rails 中为现有模型生成表单?

如何在 Rails 3.1 中为 CoffeeScript 使用选项“--bare”?

如何在 Rails 4 中为 AngularJS 更正设置根路由?

如何在 Rails 中为现有模型添加自动完成标记?

如何在 Rails 中为博客创建单独的管理界面