【问题标题】:Get the real IP address of client with Rails and Nginx?使用 Rails 和 Nginx 获取客户端的真实 IP 地址?
【发布时间】:2011-09-02 15:34:59
【问题描述】:

我的服务器没有公共IP地址,所以我不知道如何获取真实客户端的IP地址。

这是我的 nginx 的配置:

location / {
    proxy_pass http://domain1;
    proxy_set_header        Host            $host;
    proxy_set_header        X-Real-IP     $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

在我的 Rails 应用程序的控制器中,request.iprequest.remote_ip 返回我服务器的网关地址。

如何获取客户端的真实IP?

如何从 Rails 请求中获取 X-Forwarded-For 值?

【问题讨论】:

    标签: ruby-on-rails web-services networking nginx ip-address


    【解决方案1】:

    Rails 应该会自动为我们执行此操作,但它似乎在当前 3.x 中被破坏了

    我正在使用这个:

    def ip() request.env['HTTP_X_FORWARDED_FOR'] || request.remote_ip end
    

    【讨论】:

    • 如何检测来自本地主机的请求?在nginx之前我曾经得到127.0.0.1,但现在我得到的是私有IP地址......
    • 提醒一下,标头不一定是IP,更具体地说是用逗号分隔的IP列表,最左边的是原始客户端。如果只有一个 IP,上面的代码可以工作,但我怀疑如果有多个 IP 就不行。见en.wikipedia.org/wiki/X-Forwarded-For
    【解决方案2】:

    你应该得到标头值 X-forwarded-for

    http://en.wikipedia.org/wiki/X-Forwarded-For

    【讨论】:

    • 如果他坐在代理后面,它可能不是客户端的“真实”IP :) 你知道 :)
    • @Rizwan Sharif 然后我们简单地认为代理是客户端。 ^^
    • 但是我的rails日志中的IP也是gate_way地址。
    • 您的网关可能正在执行 Source Nat。 nginx安装在哪里?在网关后面还是在与网关相同的机器上或与 apache 相同的机器上?
    • 我不明白。问题是否没有表明他正在尝试获取 X-Forwarded-For 标头值,但答案表明他应该这样做。问题中的尝试是否错误?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-26
    • 2013-08-18
    • 1970-01-01
    • 2013-08-01
    • 2021-07-05
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多