根据您的描述, 您遇到的IP获取异常问题可能是由于CDN配置与Discuz! IP获取机制不兼容导致的。以下是具体的排查和解决方案:
1. **核心配置检查**
请检查config_global.php中的以下配置项:
- $_config['security']['remoteip'] = 0; //关闭IP来源检查
- $_config['security']['clientip'] = 'HTTP_X_CLIENT_IP'; //需与CDN设置对应
复制代码
2. **Nginx层适配**
在宝塔面板的站点配置中, 找到Nginx配置项, 在server段添加:
- set_real_ip_from 0.0.0.0/0;
- real_ip_header X-Client-IP;
复制代码
3. **腾讯云CDN特殊配置**
需要确认回源协议头设置:
- 必须开启"X-Client-IP"协议头
- 回源方式建议保持"协议跟随"
4. **Discuz!核心补丁**
在source/class/discuz/discuz_application.php约第537行附近, 修改IP获取逻辑:
- if(!$ip = $_G['config']['security']['clientip'] ? dgetcookie('clientip') : '') {
- $ip = isset($_SERVER[$_G['config']['security']['clientip']]) ? $_SERVER[$_G['config']['security']['clientip']] : $_SERVER['REMOTE_ADDR'];
- }
- // 增加多级代理处理
- if(strpos($ip, ',') !== false) {
- $ipArr = explode(',', $ip);
- $ip = trim(end($ipArr));
- }
复制代码
5. **安全组配置验证**
在阿里云安全组中, 需要放行腾讯云CDN的全部回源IP段(可在腾讯云CDN控制台获取最新IP列表)
6. **防火墙设置**
宝塔面板需在「网站」-「对应站点」-「防火墙」中添加规则:
7. **缓存策略调整**
建议在CDN缓存配置中排除以下路径:
- /admin.php
- /api/*
- /connect.php
复制代码
修改完成后请按此顺序操作:
① 清除CDN缓存
② 重启PHP和Nginx服务
③ 清除Discuz!数据缓存
如果仍出现异常, 可通过以下方式获取详细错误信息:
1) 临时开启config_global.php中的debug模式
2) 查看PHP错误日志路径:/www/wwwlogs/php_errors.log
3) 使用curl命令测试接口:
- curl -H "X-Client-IP: 8.8.8.8" http://您的域名/admin.php?action=testip
复制代码
建议使用此方法先进行本地测试验证IP获取是否正常。如果问题仍未解决, 可以提供具体的错误日志片段以便进一步分析。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |