
下面是伪原创改写版本,在不改变技术含义的前提下,对结构和表述做了重写,降低重复度,可直接使用:
标题
Discuz! X3.5 在 CDN / WAF / 负载均衡 环境下获取真实客户端 IP 的配置方法
正文内容
在进行下述配置之前,请务必确认当前 Discuz! X3.5 是否已经能够正确识别访客真实 IP。
如果站点目前获取的已经是真实 IP,请不要再按本文步骤进行修改,否则可能导致 IP 判断异常。
一、修改 Discuz 核心配置文件
打开文件:
config/config_global.php
找到以下配置项:
$_config[‘security’][‘onlyremoteaddr’] = 1;
将数值 1 修改为 0:
$_config[‘security’][‘onlyremoteaddr’] = 0;
二、启用 IPGetter 功能
在同一文件中,向下找到 IPGETTER 相关配置区域,例如:
// ————————- CONFIG IPGETTER ————————– //
$_config[‘ipgetter’][‘setting’] = ”;
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_FORWARDED_FOR’;
将其中的:
$_config[‘ipgetter’][‘setting’] = ”;
修改为:
$_config[‘ipgetter’][‘setting’] = ‘header’;
如果已经是
header,则无需调整。
到这里为止,大多数 CDN 环境已经可以正确获取真实 IP,建议先测试效果。
三、针对不同 CDN 厂商的进一步优化
如果你使用的 CDN 属于以下厂商之一,可以在前述步骤完成的基础上,根据厂商官方建议调整请求头字段,以提高 IP 识别准确性。
需要修改的配置为:
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_FORWARDED_FOR’;
1. Cloudflare
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_CF_CONNECTING_IP’;
2. 阿里云 CDN
方案一(常见):
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_ALI_CDN_REAL_IP’;
方案二(需配合后台配置,不保证适用):
在阿里云 CDN 回源设置中自定义 Header:
- Header 名称:
X-Real-IP - Header 值:
$remote_addr
随后修改为:
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_REAL_IP’;
“
3. 腾讯云 CDN
需在腾讯云 CDN 后台配置回源 Header:
- Header 名称:
X-Client-IP - Header 值:
$client_ip
Discuz 中设置为:
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_CLIENT_IP’;
4. 华为云 CDN
根据官方文档及用户经验反馈,
华为云 CDN 获取真实 IP 通常需要提交工单,由官方为单独域名进行配置。
配置完成后,即可正常获取客户端 IP。
5. 又拍云
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_REAL_IP’;
6. Fastly
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_FASTLY_CLIENT_IP’;
7. Microsoft Azure
$_config[‘ipgetter’][‘header’][‘header’] = ‘HTTP_X_AZURE_CLIENTIP’;
四、关于兼容性说明
由于 CDN / WAF 厂商众多,且策略各不相同,本文无法覆盖所有场景。
若调整后仍无法正确获取真实 IP,建议结合厂商最新官方文档进行排查,或通过实际访问测试 Header 值。
五、UCenter(非独立模式)额外配置
如果站点未启用 UCenter 独立模式,还需要同步修改 UCenter 的配置。
打开文件:
uc_server/data/config.inc.php
(若使用自定义 UC 路径,请替换为对应目录;部分早期 X3.5 版本可能不存在,可直接在文件末尾添加)
找到或添加以下内容:
define(‘UC_ONLYREMOTEADDR’, 1);
define(‘UC_IPGETTER’, ‘header’);
define(‘UC_IPGETTER_HEADER’, serialize(array(‘header’ => ‘HTTP_X_FORWARDED_FOR’)));
将:
define(‘UC_ONLYREMOTEADDR’, 1);
修改为:
define(‘UC_ONLYREMOTEADDR’, 0);
其中 UC_IPGETTER_HEADER 的 Header 值,同样可参考前文针对 CDN 的配置方式进行调整。
原创文章,作者:中国IPv6网,如若转载,请注明出处:https://www.ipv6s.com/basis/application/202604284364.html
微信扫一扫
支付宝扫一扫