推荐应用

Discuz多国语言翻译

Discuz多国语言翻译

文库系统/文档系统

文库系统/文档系统

美食菜谱发布菜谱

美食菜谱发布菜谱

漫画阅读中心

漫画阅读中心

小说阅读中心

小说阅读中心

语言包切换基本文件

语言包切换基本文件

成语闯关

成语闯关

谷歌登錄Google登錄

谷歌登錄Google登錄

轻APP

轻APP

网上祭祀祭拜扫墓

网上祭祀祭拜扫墓

手机MP4视频上传

手机MP4视频上传

彩票开奖号码公布

彩票开奖号码公布

DZX泰语/傣语

DZX泰语/傣语

DZX日文版(日本语)

DZX日文版(日本语)

使用CDN后Discuz!论坛提示”抱歉,你的IP地址不在被允许范围内”的解决方案

发布于 2013-06-01

使用CDN后,用户访问网站的是通过各节点间接访问网站服务器的,近期我们发现Discuz!论坛设计上的问题可能会在获取用户IP时,直接获取节点IP,而不能直接获取到用户的真实IP,在此提出一些解决方案。

该问题存在于任何CDN产品,如果您使用了CDN产品,该方法都适用。

该问题导致的结果:

1.DZ论坛可能无法获得用户的真实IP,导致某些用户IP显示的是加速乐节点的IP

2.论坛访问量过大的话,可能会导致用户访问时提示“抱歉,您的 IP 地址不在被允许,或您的账号被禁用,无法访问本站点”


产生原因:

使用CDN,对于网站访客来说,相当于使用了代理访问,而DZ在设计上,是优先获取代理IP,其它才会检测代理服务器是否将用户真实IP传输过来,也就是说获取代理IP优先于用户真实IP。如果您的网站不需要对用户访问做过多的限制,强烈建议按照以下方法进行:

解决方法(DZ X2为例):

打开source/class/class_core.php 文件

找到第341行,或者搜索“HTTP_CLIENT_IP”,找到如下代码:

if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(\'/^([0-9]{1,3}\.){3}[0-9]{1,3}$/’, $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(\'#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'],
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(\'/^([0-9]{1,3}\.){3}[0-9]{1,3}$/’, $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(\'#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'],

方法1:

删除加红的部分

方法2:
临时注释加红部分,也就是比原来的代码多了二对注释符(/*和*/)即将上面的代码修改成:
/*
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(\'/^([0-9]{1,3}\.){3}[0-9]{1,3}$/’, $_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} else
*/
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(\'#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'],
/*
if (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match(\'/^([0-9]{1,3}\.){3}[0-9]{1,3}$/’, $_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }else
*/
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all(\'#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s’, $_SERVER['HTTP_X_FORWARDED_FOR'],
以上操作后,登陆加速乐和你的Discuz!论坛后台分别清除缓存即可。
备注:加速乐发现部分版本的Discuz!该文件中没有加红的第2部分,这种版本,您只需要删除或注释第一部分即可


扫一扫添加有偿QQ
扫一扫添加微信客服