我的服务器放在防火墙的DMZ区,服务器上通过$_SERVER['REMOTE_ADDR']取不到访问者的IP,取的是防火墙的公网IP?

解决方案 »

  1.   

    print_r($_SERVER)看看里面有没有你想要的ip
      

  2.   

    if($_SERVER['HTTP_CLIENT_IP'])
    {
    $login_ip = $_SERVER['HTTP_CLIENT_IP'];
    }elseif($_SERVER['HTTP_X_FORWARDED_FOR']){
    $login_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    }else{
    $login_ip = $_SERVER['REMOTE_ADDR'];
    }
      

  3.   

    function get_client_ip(){
        if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "0.0.0.0"))
            $ip = getenv("HTTP_CLIENT_IP");
        else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "0.0.0.0"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "0.0.0.0"))
            $ip = getenv("REMOTE_ADDR");
        else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "0.0.0.0"))
            $ip = $_SERVER['REMOTE_ADDR'];
        else
            $ip = "0.0.0.0";
        return($ip);
    }
      

  4.   

    我用print_r()打印出来,根本没有$_SERVER['HTTP_CLIENT_IP'] 、$_SERVER['HTTP_X_FORWARDED_FOR']这两项,只有$_SERVER['REMOTE_ADDR'] ,而且 $_SERVER['REMOTE_ADDR']取到的值所有值都是我的防火墙的公网IP我听到防火墙会将公网过来的数据包改变源地址,会不会是这个原因呢?如果是,我在防火墙上应该怎么配置呢?谢谢 
      

  5.   

    如果是做了NAT转换,在防火墙上应该怎么设置才可以得到visitor的IP地址呢?NAT转换有没有替代的方法?谢谢