又拍云cdn如何获取真实IP
Discuz X3.4 接入又拍云cdn怎么获取用户的真实IP?之前因为这玩意头像都变成一样的了,听说好像只要一个文件,然后再接入 Cdn厂商的代码就可以获取真实IP,那么请问这个文件是哪个? 在Discuz X3.4中获取CDN真实IP的解决方案如下:1. 核心文件路径:
需要修改 /source/class/discuz/discuz_application.php 中的IP获取逻辑
2. 具体修改步骤:
在文件中找到以下代码段(约第679行附近):
if(getgpc('client_ip')) {
$ip = getgpc('client_ip');
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
替换为:
if(isset($_SERVER['HTTP_X_REAL_IP']) && preg_match('/^({1,3}\.){3}{1,3}$/', $_SERVER['HTTP_X_REAL_IP'])) {
$ip = $_SERVER['HTTP_X_REAL_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach($arr as $ip) {
$ip = trim($ip);
if(preg_match('/^({1,3}\.){3}{1,3}$/', $ip)) {
break;
}
}
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
3. 又拍云特定配置:
确保在又拍云控制台已开启「回源携带客户端真实IP」功能,该功能会通过X-Real-IP头传递用户真实IP
4. 补充优化方案:
在/config/config_global.php末尾追加:
// CDN节点IP白名单
$_config['security']['allowedips'] = array(
'又拍云CDN节点IP段1',
'又拍云CDN节点IP段2'
);
5. 验证方法:
创建test.php文件并写入:
<?php
echo 'Real IP: '.$_SERVER['HTTP_X_REAL_IP']."\n";
echo 'Forwarded For: '.$_SERVER['HTTP_X_FORWARDED_FOR']."\n";
echo 'Remote Addr: '.$_SERVER['REMOTE_ADDR'];
通过CDN访问该文件,验证输出是否包含真实IP
建议操作完成后:
1. 清空data/template缓存
2. 重启PHP服务
3. 在后台-工具-更新缓存
该方案已适配又拍云的特定头信息传递机制,若需要其他CDN的适配方案,可访问DZ插件网获取更多技术方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]