Discuz!X3.5开启CDN时,获取用户真实IP(关于UCenter验证显示为cccc解决)

任情随缘
预计阅读时长 11 分钟
位置: 首页 笔记 正文

  Discuz!X3.4升级至Discuz!X3.5后UCenter在登录是,验证码一直显示CCCC,点击刷新也还是CCCC。

   如图所示:

095155zwngaubuvurglh0v.png


  导致问题的原因:

   因为Discuz!X3.5 IP获取方式默认不相信代理IP,当网站使用CDN时,就会导致默认获取到的都是CDN的IP,而UCenter后台登录会验证IP,IP一直变动就导致登录失败。


 修改方案如下:

 可以接受某些情况下IP随意伪造的(X3.4的获取方式)

 打开 config/config_global.php
 找到

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

改为

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

  不能接受IP伪造的,继续修改

  打开 config/config_global.php找到

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

 改为

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

 找到

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

改为(其中关于这一行的代码修改,不同CDN厂商的IP参数各有不同

$_config['ipgetter']['header']['header'] = '你的CDN传递真实IP的参数';

 

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

$_config['ipgetter']['header']['header'] = '你的CDN传递真实IP的参数';

 

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';


华为云:

官方文档:https://support.huaweicloud.com/bestpractice-cdn/cdn_01_0153.html

华为云cdn 要获取真实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';


 配置好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伪造成任意值,对你的站点安全会造成很大的影响!这一点务必注意!

1、苏楠博客(www.snbk.cn)站内除标识“转载”文章外,所有文章版权均归本人原创所有。
2、为了保护原创合法权益,如需转载、复制、转帖等,务必在转发时注明原文的出处链接。
-- 展开阅读全文 --
头像
青木川-人的忘却,有时候是故意的
« 上一篇 2023-09-17
一个传统的老人
下一篇 » 2023-10-16
取消
微信二维码
支付宝二维码

发表评论

暂无评论,818人围观

«    2024年2月    »
1234
567891011
12131415161718
19202122232425
26272829

最近发表

标签列表

目录[+]