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

问题描述 投票:1回答:1

编辑:

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


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

我在localhost上测试我的网站,我不在任何代理后面,我试图显示我的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。任何替代方案?

php ip-address
1个回答
2
投票

这意味着您的服务器可能支持某种反向代理,如负载均衡器或CDN。您的PHP服务器没有从客户端接收直接连接,这些连接之前经过一些中间连接,因此该中间服务器的IP是您的服务器所见。

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

© www.soinside.com 2019 - 2024. All rights reserved.