违法网站请勿向我司工作人员发起任何形式的人工服务请求,严禁利用鸿茂传媒技术支持服务与产品从事任何非法活动,如有发现不再提供任何技术支持。 ×

Discuz! X3.5使用cdn后论坛如何获取真实ip

观前提示:修改Discuz不是获取真实IP的最佳方法

如果您有能力,建议了解Apache mod_remoteip、Nginx ngx_http_realip_module 或其他同类功能

在服务器端配置可以让你的服务器访问日志也能收集到正确的IP

参照此教程修改之前,请务必确认X3.5当前是否能够获取到真实的IP地址

如果已经能获取到真实IP地址的情况下,切勿参照此教程修改!

首先打开 config/config_global.php 这个文件,找到这样一行:

$_config['security']['onlyremoteaddr'] = 1;

将1改成0

然后到大约最下面的位置,找到这样一段:

// -------------------------  CONFIG IPGETTER  -------------------------- //

$_config['ipgetter']['setting'] = '';

$_config['ipgetter']['header']['header'] = 'HTTP_X_FORWARDED_FOR'

将其中的

$_config['ipgetter']['setting'] = '';

改成

$_config['ipgetter']['setting'] = 'header';

(如果已经是header了就不用改了)

对于许多CDN来说,做到这一步就已经能获取到真实IP了,可以试一下。

在做完上一步的前提之下,如果你的CDN属于以下范围,可以进一步参考以下内容尝试进行修改,并观察获取到的IP

按下述方法进一步修改后往往能得到正确或者更准确的结果

(以下信息均来自于各大厂商官方文档,是否可用需要看厂商文档的准确程度,建议修改后自行测试)

需要修改的是这一行:

$_config['ipgetter']['header']['header'] = 'HTTP_X_FORWARDED_FOR';

Cloudflare:

改成

$_config['ipgetter']['header']['header'] = 'HTTP_CF_CONNECTING_IP';

阿里云:

方案1:改成

$_config['ipgetter']['header']['header'] = 'HTTP_ALI_CDN_REAL_IP';

方案2:

(这个视情况修改,不一定可用)

https://help.aliyun.com/document_detail/155768.html

参考此文章最下面的配置示例二

配置场景:在回源头里面添加客户端真实IP信息,给源站传递客户端IP地址信息。

配置方法:

自定义请求头名称:X-Real-IP。

请求头参数:$remote_addr。

配置后,将上述行改成

$_config['ipgetter']['header']['header'] = 'HTTP_X_REAL_IP';

腾讯云:

https://cloud.tencent.com/document/product/228/45078

参考此文章进行修改腾讯云的配置

头部参数设置为:X-Client-IP

头部取值设置为:$client_ip

配置后,将上述行改成

$_config['ipgetter']['header']['header'] = 'HTTP_X_CLIENT_IP';

又拍云:

改成

$_config['ipgetter']['header']['header'] = 'HTTP_X_REAL_IP';

Fastly:

改成

$_config['ipgetter']['header']['header'] = 'HTTP_FASTLY_CLIENT_IP';

Azure:

改成

$_config['ipgetter']['header']['header'] = 'HTTP_X_AZURE_CLIENTIP';

由于CDN厂商众多,无法一一列出,且这部分功能还需要进一步的完善

配置好Discuz部分并可以顺利正常使用以后,如果您的站点没有使用独立模式的话,还需要对UCenter Server也进行相应的配置。

到 uc_server/data/config.inc.php 文件当中找到如下一段:(使用自定义路径uc的需要将uc_server换成自己真正的uc位置)

(早期X3.5版本可能没有,没有可以在文件结尾自行加上)

define('UC_ONLYREMOTEADDR', 1);

define('UC_IPGETTER', 'header');

define('UC_IPGETTER_HEADER', serialize(array('header' => 'HTTP_X_FORWARDED_FOR')));

将UC_ONLYREMOTEADDR那行的1改成0即可。

UC_IPGETTER_HEADER那行的HTTP_X_FORWARDED_FOR,也可以按照上面修改Discuz的方式修改成自己需要的值(上面没改过的则不用管)

特别安全提示:

$_config['security']['onlyremoteaddr'] = 1;

配置文件中的这一行,改成0以后绝对要仔细检查ipgetter是否正确填写

如果忘了写虽然也可以让你获取到用户IP,但会导致网站无条件信任用户端传来的IP信息

黑客可以借机将自己的IP伪造成任意值,对你的站点安全会造成很大的影响!

这一点务必注意!

------------------------

经过鸿茂传媒测试:部分用户修改上面代码后,测试注册论坛账号后发现,依然用户注册的ip还是cdn的ip显示。

打开网站目录:/source/class/discuz/discuz_application.php 文件,找到return $ip;方法,如下:

20240527161110

替换以下代码

if (isset($_SERVER['HTTP_X_REAL_IP'])){

$ip = $_SERVER['HTTP_X_REAL_IP'];

}

return $ip;

20240527161302

修改以上代码后,去后台更新缓存,并重新在测试注册账号是否是本地ip了。

© 网站版权与免责声明

1、【鸿茂传媒】独立拥有本网站相关网页内所有资料的版权;

2、未经【鸿茂传媒】的明确书面许可,任何人不得对其进行复制;

3、本网站未注明【鸿茂传媒】的文章,均来源于网络,仅供大家学习与参考;

4、如有侵权/违规/不妥请联系客服QQ或邮箱删除,敬请谅解;

5、【鸿茂传媒】保留随时更正、修改、更新本声明的权利。法律申明

服务需求留言板
*紧急问题联系客服
提交
提交需求
工作日: 8:30 - 22:00  在线客服咨询

扫码咨询微信客服

鸿茂传媒企业介绍
顶部