请选择 进入手机版 | 继续访问电脑版
广告

[司机经验] Discuz X3.3 3.2论坛转换https教程,使用SSL完美开启https教程

[复制链接]
查看: 58|回复: 2
  • TA的每日心情

    2018-3-28 12:17
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    237

    主题

    275

    帖子

    876

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    876

    官方

    发表于 2018-11-15 23:29:02 | 显示全部楼层 |阅读模式

    前段时间,正好社区域名转https,记录过程,方便后者参阅。

    前提:已经拥有域名证书,且服务器支持添加SSL证书(如VPS或云主机,以及部分虚拟主机)


    360网站卫士SSL证书免费开启地址:http://wangzhan.360.com/set/protect/ (推荐!)

    百度云加速HTTPS加速支持:http://next.su.baidu.com/console/website/https-cdn.html#zid/

    沃通免费ssl证书:https://bbs.wosign.com/forum-37-1.html

    狗爹SSL证书:https://sg.godaddy.com/zh/web-security/ssl-certificate


    虽然DiscuzX3.2、X3.3已经针对https做了优化,但仍有很多地方需要改动,经过在几个生产环境的改造中发现,Discuz目前可以完美支持https并显示绿色https图标,不过有些麻烦,且每个环境都会出现自己的问题。


    第一步:

    全局 > 站点信息 > 网站 URL,修改为https://www.0co.cn/的格式


    第二步:修成Discuz适配https

    如果你的Web服务是Apache,请忽略这一步,Nginx请继续看:

    Discuz判断网站是否启动SSL是采用 $_SERVER[‘HTTPS’] 的方式,此方法不支持Nginx(nginx+php-fpm),需要先做一些修改,让Discuz使用 $_SERVER[‘SERVER_PORT’]来判断网站是否启用SSL。

    source/class/discuz/discuz_application.php(约第187行处):

    查找:

    • $_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

    [color=rgb(143, 195, 31) !important]复制代码

    修改为:
    • $_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

    [color=rgb(143, 195, 31) !important]复制代码

    uc_server/avatar.php (约第13行处):

    查找:

    • define('UC_API', strtolower(($_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

    [color=rgb(143, 195, 31) !important]复制代码

    修改为:

    • define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

    [color=rgb(143, 195, 31) !important]复制代码



    第三步:Ucenter通信使用https方式

    后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

    UCenter后台 > 应用管理 > 应用的主URL,修改为https开头。


    第五步:解决浏览器提示“加载不安全的脚本”


    这个提示是因为这个脚本使用http方式加载的原因:


    [color=rgb(143, 195, 31) !important]复制代码

    此脚本的功能是检查补丁和安全通知,用处不大,果断删除。


    删除方法:编辑模板的footer.htm,在最后找到并删掉:

    • <!–{eval output();}–>

    [color=rgb(143, 195, 31) !important]复制代码

    即可。


    第六步:解决QQ互联的问题

    首先升级QQ互联插件,最低版本要求是 1.18.2,如果升级后依然不行,需要修改回调 URL 为非 HTTPS 的:

    找到:

    source/plugin/qqconnect/connect.class.php 大约41行

    在common_base() 函数里面,将 $_G[‘siteurl’] 直接硬编码为 你的http的URL ,首先修改callback_url,如果不行,将所有包含connect.php 的 URL 全部替换。


    第七步:将论坛帖子中网站的URL改成https格式的。

    会员在发帖的过程中,很可能调用了本站别处的帖子或连接,而这个链接肯定是http的,所以需要将这些链接全部修改成https格式的:


    执行SQL语句,可以在DZ后台,或者phpmyadmin中都可以:


    [color=rgb(143, 195, 31) !important]复制代码

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

    有会员反馈以上SQL升级语句报错:


    如果存在该问题则使用以下SQL语句即可:(注意符号标点~)


    [color=rgb(143, 195, 31) !important]复制代码

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

    最后,Nginx开启强制https跳转,在nginx虚拟主机配置文件中,在Server字段增加:

    • if ($server_port = 80) {
    • return 301 https://$server_name$request_uri;
    • }
    • if ($scheme = http) {
    • return 301 https://$server_name$request_uri;
    • }

    [color=rgb(143, 195, 31) !important]复制代码

    注意:这里需要根据自己的服务器环境配置,不正确或者有问题的配置可能导致Ucenter通信失败,Apache需要在.htaccess中添加规则。


    Apache .htaccess规则:

    • 等待添加

    [color=rgb(143, 195, 31) !important]复制代码

    修改过后,更新缓存,发现大多数链接都变成了https.
    2.2、后台设置

    在后台还有一些设置,可能会干扰https的使用

    后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

    UCenter后台 > 应用管理 > 应用的主URL,修改为https开头

    另外在 后台 > 全局 > 域名设置 中的一些设置也可能使https失效,如果进行了之前的几步还是无法启用,可以暂时删除这里的设置试试。


    3、清理缓存

    设置完成之后,需要清理缓存,使设置生效。

    清理缓存及内存缓存,如果设置了帖子缓存,还需清理数据库内的缓存(清空相应cache数据库,或者静等缓存失效)

    至此,Discuz https启用成功,当然,在访问某些页面的时候,可能锁会打上叉。因为页面中加载了其他http内容。可能是统计代码、QQ分享代码、QQ秀头像等,这部分服务暂时没有提供https协议,因而无法启用。只能等待Discuz进一步支持https。


    ------------------------------------------
    到这里发现uc_center通信失败,我继续操作

    • 打开目录 uc_server/model/misc.php 文件;
    • 在misc.php中搜索以下的代码:$port = !empty($matches['port') ? $matches['port' : 80;

    • 在这段代码下面加上以下的代码:if(substr($url,0,5)=='https'){
      $ch = curl_init($url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      if($post){
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
      }
      if($cookie){
      curl_setopt($ch, CURLOPT_COOKIE, $cookie);
      }
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      return curl_exec($ch);
      }

    • 修改后,保存。上传替换掉原来的misc.php,即可解决Discuz开启HTTPS站点后UCenter通信失败的问题



    到此,你应该可以看到绿色的https标志了。





    上一篇:[移动样本分析]阿拉伯加密型锁机软件分析

    该用户从未签到

    0

    主题

    3228

    帖子

    1495

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1495
    发表于 2018-11-16 00:07:00 | 显示全部楼层
    路过,学习下

    该用户从未签到

    0

    主题

    3231

    帖子

    1505

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    1505
    发表于 2018-11-16 00:13:08 | 显示全部楼层
    有竞争才有进步嘛
    *滑动验证:
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    精彩图文
    快速回复 返回列表 搜索 官方QQ群

    平台简介

    广荣社区(wwww.glory123.com),是一个专注于网络资源分享交流平台,汇集全网精品软件,优秀源码,网络教程,活动先报,网络技术!全站99%的资源都是免费下载,每日更新,资源亲测(如果我们有侵犯了您权益的资源请联系我们删除)

    QQ|Archiver|手机版|小黑屋|广荣社区-分享能共享的一切! ( 冀ICP备16028691号|网站地图

    返回顶部 返回列表