前段时间在开发的过程中,遇到了一个很诡异的问题,明明在请求页面的时候Request了客户端的IP,但是在页面打印出来的时候却是不一样的IP,此IP从没见过,在纠结了N长时间后,终于发现是反向代理惹的祸,相信大家肯定有人遇到过这般问题,所以就写出来供大家参考
值得注意的是:必须在代理服务器上面设置将服务器信息带入主机头,否则不管怎么取都取不到你的客户端IP的
function getip(){
$unknown ='unknown';
if( isset($_SERVER['HTTP_X_FORWARDED_FOR'])&& $_SERVER['HTTP_X_FORWARDED_FOR']&& strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown)){
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif ( isset($_SERVER['REMOTE_ADDR'])&& $_SERVER['REMOTE_ADDR']&& strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)){
$ip = $_SERVER['REMOTE_ADDR'];
}
/*
处理多层代理的情况
或者使用正则方式:$ip = preg_match("/[d.]{7,15}/", $ip, $matches) ? $matches[0] : $unknown;
*/
if(false!== strpos($ip,','))
$ip = reset(explode(',', $ip));
return $ip;
}