$ _SERVER ['REMOTE_ADDR']给出服务器的IP地址而不是用户的IP地址

时间:2018-08-29 06:40:28

标签: php ip-address

编辑:

我已经清理了浏览器的缓存,现在我的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。 还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

这意味着您的服务器可能位于某种反向代理之后,例如负载平衡器或CDN。您的PHP服务器未从客户端接收直接连接,这些连接之前经过某个中间设备,因此该中间设备的IP是服务器所能看到的。

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