分享下 Discuz! X3.2 启用 SSL 的过程 - V2EX
roustar31
V2EX    SSL

分享下 Discuz! X3.2 启用 SSL 的过程

  •  
  •   roustar31 2016-11-02 20:04:42 +08:00 8295 次点击
    这是一个创建于 3342 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Discuz! X3.2 本身对 HTTPS 的支持很有限,程序本身支持,但还有很多地方需要调整和修改的。
    站点全部链接默认 HTTPS ,无任何 HTTP 链接通过 301 跳转到 HTTPS 。 浏览器显示绿色安全标志,无“不安全内容”提示。
    HTTPS SSL
    具体来说,我们需要从以下 6 个方面来实现我们最终的效果。

    服务器前端程序的配置
    一般来说,大家多使用 Nginx 作为前端程序,关于 Nginx 开启 HTTPS 的教程,网上有很多,你可以参考这篇文章: https://aotu.io/notes/2016/08/16/nginx-https/。 这是本论坛的 Nginx 配置文件, Nginx 版本为 1.8.0 。

    server { listen 80;
    server_name www.repaik.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root /data/web/www.repaik.com;
    return 301 https://$server_name$request_uri;
    #HSTS
    }
    server
    { listen 443 ssl;
    #listen [::]:80;
    server_name www.repaik.com;
    index index.html index.htm index.php default.html default.htm default.php;
    root /data/web/www.repaik.com;
    #SSL Start
    ssl_certificate /root/ssl.crt;
    ssl_certificate_key /root/ssl.key;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    #SSL End
    include discuzx.conf;
    #error_page 404 /404.html;
    location ~ [^/].php(/|$)
    {
    # comment try_files $uri =404; to enable pathinfo
    try_files $uri =404;
    fastcgi_pass unix:/tmp/php-cgi.sock;
    fastcgi_param HTTPS $https if_not_empty;
    fastcgi_index index.php;
    include fastcgi.conf;
    #include pathinfo.conf;
    }

     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } access_log off; } 

    Discuz 判断服务器是否使用 SSL 的修补和完善
    Discuz 判断服务器是否使用 SSL 的代码不适合 Nginx+CGI 的情况,即 PHP-FPM 。这个时候我们需要修改以下文件:
    Discuz 采用 $_SERVER[‘ HTTPS ’] 的方式来判断 SSL ,但是因为我的 VPS 架构问题( nginx+php-fpm ),无法采用这种方式识别,所以需要对 Discuz 程序进行一些调整(使用 $_SERVER[‘ SERVER_PORT ’] 来判断)。 source/class/discuz/discuz_application.php (约第 187 行处): 查找:
    $_G['isHTTPS'] = ($_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;
    修改为:
    $_G['isHTTPS'] = ($_SERVER['SERVER_PORT'] == 443 || $_SERVER['HTTPS'] && strtolower($_SERVER['HTTPS']) != 'off') ? true : false;

    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'], '/'))));
    修改为:
    define('UC_API', strtolower(($_SERVER['SERVER_PORT'] == 443

    除去非 HTTPS 内容避免提示”不安全内容“
    Source/plugin/manyou/Service/DiscuzTips.php ,最后的那段 JS 加载脚本删除就行。
    非楼主层如果有点评,那么点评者头像不是 HTTPS 开头,也需要修改一个文件来适配: template/default/forum/viewthread_node_body.htm (约 180 行),搜索 div class="psta vm">,将下面一行注释掉或者删除。
    打开浏览器,使用开发者工具或者查看源码逐一排查加载的非 HTTPS 资源并修改。

    后台设置的修改完善
    在后台还有一些设置,可能会干扰 https 的使用
    后台 >全局 > 站点 URL ,改为 https 开头的
    后台 > 站长 > UCenter 设置 > UCenter 访问地址,修改为 https 开头的
    UCenter 后台 > 应用管理 > 应用的主 URL ,修改为 https 开头。修改后可能会显示通讯失败,如果 UC 和论坛程序安装在同一机器,此失败可无视,实测可以和 UC 正常通讯不影响(测试是否正常通讯程序的 Bug ),如果 UC 和论坛程序不在一台机器上,有可能不能通讯。 另外在 后台 > 全局 > 域名设置 中的一些设置也可能使 https 失效,如果更新缓存后论坛默认连接还是 HTTP ,请删除 后台 > 全局 > 域名设置 > 应用域名 > 默认 里面的默认域名(一般去 forum.php 尾巴这里会有内容,为了 HTTPS 请删除)。

    模板的调整
    主要在模板的 foot.html 以及 header.html 等文件中,使用工具逐一排查模板文件中写死的 HTTP 链接,修改为 HTTPS 。

    数据库的调整
    在论坛这种交互社区中,经常回复发帖时会有出现主域名的链接,在没有 HTTPS 之前,链接都是 HTTP 开头,这个时候,我们需要修改数据库,运行下面的 mysql 命令更新数据库,将 HTTP 替换为 HTTPS :
    进入 DZ 后台:站长 数据库 升级

    UPDATE pre_forum_post SET message=REPLACE(message,'http://www.repaik.com','https://www.repaik.com');
    请将 www.repaik.com 替换为自己的域名

    需要注意的是,出于安全考虑, Discuz 后台默认情况下禁止 SQL 语句直接执行,只能使用常用 SQL 当中的内容,如果想自己随意书写 SQL 升级语句,需要将程序文件 config/config_global.php 当中的$_config[admincp][runquery] 设置修改为 1 。

    PS :百度联盟已经支持 HTTPS 加载。所以哪些担心开启 HTTPS 没法赚广告费的同学可以放心了。

    这是我博客更换证书的一篇文章,点击可以送个 IP 。

    6 条回复    2017-10-30 02:11:35 +08:00
    jdle
        1
    jdle  
       2016-11-06 07:56:27 +08:00
    你这样伪静态不失效?
    roustar31
        2
    roustar31  
    OP
       2016-11-07 08:23:46 +08:00
    @jdle 这个和伪静态有什么关系?不影响伪静态
    ladyv2
        3
    ladyv2  
       2017-01-06 19:33:19 +08:00
    这样修改不行的, UC 通讯会失败。用户更换头像什么的都会出问题
    roustar31
        4
    roustar31  
    OP
       2017-03-26 14:24:17 +08:00
    @ladyv2 我站都开 HTTPS 大半年了,毫无问题。。。
    lofky7
        5
    lofky7  
       2017-06-23 15:31:32 +08:00
    你好,
    问一下,论坛按照你的教程开启了全站 https

    但是为什么论坛的板块地址还是 http 的,并没有自动转换成 https

    https://bbs.liuxuesheng8.com/
    tinglai
        6
    tinglai  
       2017-10-30 02:11:35 +08:00
    关联链接不支持 SSL,要在哪改,填写了 https 的网址会变成 http://https//www 这样的链接
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2614 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:05 PVG 23:05 LAX 07:05 JFK 10:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86