首先,需修改配置文件conf/conf.php ,修改 'cdn_on' => 0 为 'cdn_on' => 1,一般情况下即可正确获取真实IP。
如果不行,因为xiuno默认使用不安全的获取IP方式,部分情况下载无法准确获取CDN传递的真实IP,因此需要修改文件:
xiunophp/misc.func.php ,位置531行处,注释掉代码段
/*function ip() {
$conf = _SERVER('conf');
$ip = '127.0.0.1';
if(empty($conf['cdn_on'])) {
$ip = _SERVER('REMOTE_ADDR');
} else {
if(isset($_SERVER['HTTP_CDN_SRC_IP'])) {
$ip = $_SERVER['HTTP_CDN_SRC_IP'];
} elseif(isset($_SERVER['HTTP_CLIENTIP'])) {
$ip = $_SERVER['HTTP_CLIENTIP'];
} elseif(isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
$arr = array_filter(explode(',', $ip));
$ip = trim(end($arr));
} else {
$ip = _SERVER('REMOTE_ADDR');
}
}
return long2ip(ip2long($ip));
}*/
去掉555行函数的注释,如下:
// 安全获取用户IP,信任 CDN 发过来的 X-FORWARDED-FOR
function ip() {
global $conf;
$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '127.0.0.1'; // 如果有 CDN 的时候,为离服务器最近的 IP
if(empty($conf['cdn_ip']) || empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $ip;
} else {
// 判断 cdnip 合法性,严格过滤 HTTP_X_FORWARDED_FOR
// X-Forwarded-For: client1, proxy1, proxy2, ...
// 离服务器最最近的为最后一个 proxy2,应该在 $conf['cdn_ip'] 当中才安全可信
foreach($conf['cdn_ip'] as $cdnip) {
$pos1 = strrpos($cdnip, '.');
$pos2 = strrpos($ip, '.');
// 合法 CDN IP 段
if($ip == $cdnip || ($pos1 == $pos2 && substr($cdnip, $pos1) == '.*' && substr($cdnip, 0, $pos1) == substr($ip, 0, $pos2))) {
$userips = !empty($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['HTTP_X_REAL_IP'];
if(empty($userips)) return $ip; // 此处 CDN 未转发 userip,有错误,可能需要记录日志
$arr = array_values(array_filter(explode(',', $userips)));
return long2ip(ip2long(end($arr)));
}
}
return $ip;
}
}
// 日志记录
然后保存并更新缓存,即可获取CDN传递的用户真实IP地址了。
最后于 2022-8-28被xiuno编辑,原因:
xiuno顶尖网声明
1,本帖图片及内容纯属发布用户个人意见,与xiuno顶尖网无关!
2,本帖如为原创资源/教程分享帖,则本站与发布用户共同享有内容版权!
3,本站管理有权在不经发布者同意的情况下,根据版规及相关法律法规删除/修改本帖!
4,如无特别说明,任何个人或者组织不得转载本帖内容!任何个人或团体不得将本站资源用于非法用途!
5,未尽事宜最终解释权归本站所有!
他们喜欢这个资源 
宁

zackma

独木桥€

hanyun

qishou

晴阳