Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

DX3.4使用百度云cdn获取真实IP

[复制链接]
冰戈→/回头 发表于 2020-12-12 13:30:44 | 显示全部楼层 |阅读模式
本帖最后由 冰戈→/回头 于 2020-12-14 14:58 编辑

如题,DZ3.4使用百度云cdn,登录IP老是提示cdn的IP,请问DX3.4该如何修改代码呢?

==========================
环境:CentOS 8.2.2004(Py3.7.8)   php7.4    apache2.4    mysql8.0
CDN:百度云加速免费版
目前通过修改,已经可以正常识别到用户的真实IP了
1、修改apache配置文件
<IfModule log_config_module>
    #
    # The following directives define some format nicknames for use with
    # a CustomLog directive (see below).
    #
    LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

     LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

2、修改discuz 3.4中文件/source/class/discuz/discuz_application.php

private function _get_client_ip() {
                $ip = $_SERVER['REMOTE_ADDR'];
                if (!$this->config['security']['onlyremoteaddr']) {
                        if (isset($_SERVER['X-Forwarded-For']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['X-Forwarded-For'])) {
                                $ip = $_SERVER['X-Forwarded-For'];
                        } 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'], $matches)) {
                                foreach ($matches[0] AS $xip) {
                                        if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
                                                $ip = $xip;
                                                break;
                                        }
                                }
                        }
                }
                return $ip == '::1' ? '127.0.0.1' : $ip;
        }


如有错误请各位大佬指正。

allthebest 发表于 2020-12-12 20:53:07 | 显示全部楼层
回复

使用道具 举报

 楼主| 冰戈→/回头 发表于 2020-12-13 18:04:34 | 显示全部楼层
allthebest 发表于 2020-12-12 20:53
https://www.hostarr.com/apache-mod_remoteip/

看看以上方法

感谢,学习一下
回复

使用道具 举报

babyfacer 发表于 2020-12-13 23:14:04 | 显示全部楼层
本帖最后由 babyfacer 于 2020-12-15 05:35 编辑

所以3.4最简单的办法就是$_config['security']['onlyremoteaddr']设置为0
NGINX,在开启CDN的情况下,X3.4 config 文件里边 $_config['security']['onlyremoteaddr'] 设置0 默认就能获取到(以前X3.4默认是0)。和防火墙没啥关系。
X3.5在$_config['security']['onlyremoteaddr']设置为1的情况下,防火墙尝试获取真实IP失败,修改NGINX配置后能获取,获取到的是IPV6地址。官方建议配置ipgetter,但是我不会

回复

使用道具 举报

 楼主| 冰戈→/回头 发表于 2020-12-14 14:48:55 | 显示全部楼层
本帖最后由 冰戈→/回头 于 2020-12-14 15:01 编辑
babyfacer 发表于 2020-12-13 23:14
云,我DZ也是使用百度CDN,3.4就是真实IP,3.5就是CDN节点IP

我使用宝塔面板,有一个功能,可以直接通过 ...

我用的也是宝塔,刚才去看了下,apache防火墙是收费的(19.8),目前通过修改apache服务器配置文件和论坛程序代码已经成功了。不知道你通过防火墙是否需要修改服务器配置及网站代码呢?
回复

使用道具 举报

babyfacer 发表于 2020-12-15 05:26:41 | 显示全部楼层
本帖最后由 babyfacer 于 2020-12-15 05:34 编辑
冰戈→/回头 发表于 2020-12-14 14:48
我用的也是宝塔,刚才去看了下,apache防火墙是收费的(19.8),目前通过修改apache服务器配置文件和论坛 ...

所以3.4最简单的办法就是$_config['security']['onlyremoteaddr']设置为0
NGINX,在开启CDN的情况下,X3.4 config 文件里边 $_config['security']['onlyremoteaddr'] 设置0 默认就能获取到(以前X3.4默认是0)。和防火墙没啥关系。
X3.5在$_config['security']['onlyremoteaddr']设置为1的情况下,防火墙尝试获取真实IP失败,修改NGINX配置后能获取,获取到的是IPV6地址。官方建议配置ipgetter,但是我不会
防火墙的话,宝塔面板NGINX,有免费版和付费版。不知道apache是什么情况
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-4-19 06:12 , Processed in 0.424989 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表