Discuz! X3.4 在Nginx部署SSL后启用全站HTTPS访问教程
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://你的域名');
发表评论