【问题标题】:$_SERVER['REMOTE_ADDR'] gives the IP Address of the server instead of the IP Address of the user$_SERVER['REMOTE_ADDR'] 给出服务器的 IP 地址而不是用户的 IP 地址
【发布时间】:2018-08-29 06:40:28
【问题描述】:

编辑:

我已经清理了浏览器的缓存,现在我的 PHP 代码可以运行了。


我知道已经有类似的问题,我不能相信 $_SERVER['REMOTE_ADDR'] 来获取访问者的真实 IP 地址。

我正在本地主机上测试我的网站,我没有在任何代理后面,我试图显示我的 IP 地址,但 $_SERVER['REMOTE_ADDR'] 给出了 127.0.0.1 ,即服务器的 IP 地址。

如果我将相同的代码在线放在我的服务器中,我会再次收到服务器的 IP 地址。

我试过没有成功:

function get_visitor_ip() {
    $ipaddress = '';
    if (isset($_SERVER['HTTP_CLIENT_IP'])) {
        $ipaddress .= $_SERVER['HTTP_CLIENT_IP'] . ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_X_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_X_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED_FOR'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED_FOR']. ' - ';
    }
    if(isset($_SERVER['HTTP_FORWARDED'])) {
        $ipaddress .= $_SERVER['HTTP_FORWARDED']. ' - ';
    }
    if(isset($_SERVER['REMOTE_ADDR'])) {
        $ipaddress .= $_SERVER['REMOTE_ADDR']. ' - ';
    }

    if($ipaddress == '') {
        $ipaddress = 'UNKNOWN';
    }

    return $ipaddress;
}

但同样,它返回 127.0.0.1 。 任何替代解决方案?

【问题讨论】:

  • 您希望获得什么 IP 地址?在您的本地机器上,连接到您的本地主机。
  • @Daniele 您不使用您用来连接到 Internet 的 IP 地址,因为连接永远不会离开您的 PC。您从本地主机连接到本地主机,因此您将看到本地主机的 IP。
  • 我假设您不会通过“互联网”连接到您的本地主机。您在同一台机器上,“直接”连接到您的本地主机,因此不涉及“互联网 IP 地址”。
  • @Ivar , kerbholz 好的!请忘记本地主机上的示例,如果我在我的服务器中在线放置相同的 php 代码,我也会遇到同样的问题。我收到的是服务器而不是客户端的 IP 地址。
  • 您的服务器是否恰好在反向代理后面运行?在这个阶段,我建议var_dump($_SERVER) 看看那里有什么

标签: php ip-address


【解决方案1】:

这意味着您的服务器可能位于某种反向代理之后,例如负载平衡器或 CDN。您的 PHP 服务器没有接收到来自客户端的 直接 连接,这些连接之前经过了一些中间层,所以该中间层的 IP 就是您的服务器看到的全部。

在这种情况下,中间代理通常会在某些指定的 HTTP 标头中将实际客户端的 IP 转发到您的 PHP 服务器。那是当您非常明确且非常有选择地使用$_SERVER['HTTP_X_FORWARDED']之类的东西时; 当且仅当您知道自己处于这种情况以及您可以信任哪个 HTTP 标头时。请查阅有关您的主机/代理/网络情况的文档,它会告诉您什么要使用的标头。

【讨论】:

  • 正如我写信给 Phil $_SERVER['HTTP_X_FORWARDED'] 一样,最终给了我客户端 IP 地址。
猜你喜欢
  • 2011-05-14
  • 2015-06-19
  • 2016-05-12
  • 2012-09-23
  • 2017-04-28
  • 2015-06-21
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多