Discuz! X3.4 在Nginx部署SSL后启用全站HTTPS访问教程

  • 2018-02-06
  • 568
  • 0
  • 0

SSL证书配置

首先,要开启SSL,总得有一个证书吧?无论是正规CA颁发的,还是自己签的,没有肯定是不行的。如果没有的话,先去申请个吧。(具体方法请谷歌,这里不赘述,腾讯云现在有一年期的免费SSL证书可申请)

以及在配置文件里加上SSL相关设置,我这里使用的是Nginx反向代理Apache,并且同时支持HTTP与HTTPS访问;参考配置:

server {
    listen 80;
    server_name bbs.abcba.club;
    access_log logs/bbs.abcba.club_access.log;
    error_log logs/bbs.abcba.club_error.log;
    location / {
      proxy_pass http://localhost:8082;  #这里是反向代理Apache的站点端口
      proxy_set_header Remote_Addr $remote_addr;
      proxy_set_header X-real-IP $remote_addr;
      proxy_set_header Host  $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-From-IP $remote_addr;
        }
    }
server {
    listen 443 ssl;
    server_name bbs.abcba.club;
    charset utf-8;
    ssl_session_cache  shared:SSL:1m;
    ssl_session_timeout  5m;
    access_log logs/bbs.abcba.club_access.log;
    error_log logs/bbs.abcba.club_error.log;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    ssl_certificate      /usr/local/nginx/conf/1_bbs.abcba.club_bundle.crt;
    ssl_certificate_key  /usr/local/nginx/conf/2_bbs.abcba.club.key;
    location / {
      proxy_pass http://localhost:8082;
      proxy_set_header Remote_Addr $remote_addr;
      proxy_set_header X-real-IP $remote_addr;
      proxy_set_header Host  $http_host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-From-IP $remote_addr;
        }
    }

顺便贴一下Apache vhost的配置:

<VirtualHost *:8082>
    ServerAdmin root@abcba.club
    DocumentRoot "/usr/local/apache/htdocs/abcba.club/bbs"
    ServerName bbs.abcba.club
    ErrorLog "logs/dummy-bbs.abcba.club-error_log"
    CustomLog "logs/dummy-bbs.abcba.club-access_log" common
</VirtualHost>

配置开始

自 Discuz! X3 开始,已经加入了对https的支持,Discuz采用 $_SERVER[‘HTTPS’] 的方式来判断SSL,如需彻底使用HTTPS访问,需要对Discuz程序进行一些调整。

1 修改应用模板

cd到站点所在目录,使用vim打开:
source/class/discuz/discuz_application.php
(约第187行处):  
查找:

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

先使用yy & p复制并粘贴,把这一行前面加#号注释掉,将粘贴的这一行改为:

$_G['isHTTPS'] = true;

2 修改UC模板

修改
uc_server/avatar.php
(就在头几行,大概14行),将:

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).substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

3 修改默认模板

修改
template/default/common/header.htm
使用vim的查找替换功能将 http:// 全部查找替换为:https:// (一共5处)

:%s#http://#https://#g 

4 修改函数模板

修改
source/function/function_core.php

查找到 $content = output_replace($content); 在大约1040行
在下面添加一行内容:

$content = str_replace('http://你的域名','https://你的域名',$content);

5 修改全局配置

修改文件
config/config_global.php
查找到 $_config[admincp][runquery]内容,将右边的值由0改为1 。

之后在进入Discuz后台–站长–数据库–升级 执行以下sql语句:

UPDATE pre_forum_post SET message=REPLACE(message,'http://你的域名','https://你的域名');

6 修改网站URL

进入到Discuz后台–全局–站点信息–网站URL:
将http:// 改成https://

7 修改UC URL

①进入到Discuz后台–站长–UCenter设置–UCenter访问地址改成https:// 网址
②Discuz后台 -– UCenter(如果不能正常访问可以在新窗口打开,也可以直接访问UC地址) – 应用管理 – 点右边的编辑 – 应用的主URL改成https://你的域名

8 更新缓存

①进入后台–工具–更新缓存,3个复选框打勾,点击确定执行更新缓存。
②Discuz后台 -– UCenter – 更新缓存(左边栏倒数第二列) – 复选框全部打勾,点击提交执行更新缓存。

到此Discuz全站HTTPS访问的配置已经完成。

前台

后台

前台与后台均可支持HTTPS访问

评论

还没有任何评论,你来说两句吧

粤ICP备18016851号-1

©2019 东南未归人

友情链接