DISCUZ新版本已全面支持HTTPS443端口,以下為老版本開啟HTTPS訪問解決方案:
前提:已經擁有域名證書,且服務器支持添加SSL證書(如VPS或云主機,以及部分虛擬主機)
雖然DiscuzX3.2、X3.3已經針對https做了優化,但仍有很多地方需要改動,經過在幾個生產環境的改造中發現,Discuz目前可以完美支持https并顯示綠色https圖標,不過有些麻煩,且每個環境都會出現自己的問題。
第一步:
全局 > 站點信息 > 網站 URL,修改為//bbs.02957.com的格式
第二步:修成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;
復制代碼
修改為:
$_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 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));
復制代碼
第三步:Ucenter通信使用https方式
后臺 > 站長 > UCenter設置 > UCenter 訪問地址,修改為https開頭的
UCenter后臺 > 應用管理 > 應用的主URL,修改為https開頭。
第五步:解決瀏覽器提示“加載不安全的腳本”
這個提示是因為這個腳本使用http方式加載的原因:
復制代碼
此腳本的功能是檢查補丁和安全通知,用處不大,果斷刪除。
刪除方法:編輯模板的footer.htm,在最后找到并刪掉:
復制代碼
即可。
第六步:解決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中都可以:
UPDATE pre_forum_post SET message=REPLACE(message,’//舊網址.com’,’//新網址.com’);
復制代碼
------------------------------------------------------
有會員反饋以上SQL升級語句報錯:
如果存在該問題則使用以下SQL語句即可:(注意符號標點~)
UPDATE pre_forum_post SET message=REPLACE(message,’//舊網址.com’,’//新網址.com’);
復制代碼
-------------------------------------------------------
最后,Nginx開啟強制https跳轉,在nginx虛擬主機配置文件中,在Server字段增加:
if ($server_port = 80) {
return 301 //$server_name$request_uri;
}
if ($scheme = http) {
return 301 //$server_name$request_uri;
}
復制代碼
注意:這里需要根據自己的服務器環境配置,不正確或者有問題的配置可能導致Ucenter通信失敗,Apache需要在.htaccess中添加規則。
Apache .htaccess規則:
等待添加
復制代碼
修改過后,更新緩存,發現大多數鏈接都變成了https.
2.2、后臺設置
在后臺還有一些設置,可能會干擾https的使用
后臺 > 站長 > UCenter設置 > UCenter 訪問地址,修改為https開頭的
UCenter后臺 > 應用管理 > 應用的主URL,修改為https開頭
另外在 后臺 > 全局 > 域名設置 中的一些設置也可能使https失效,如果進行了之前的幾步還是無法啟用,可以暫時刪除這里的設置試試。
3、清理緩存
設置完成之后,需要清理緩存,使設置生效。
清理緩存及內存緩存,如果設置了帖子緩存,還需清理數據庫內的緩存(清空相應cache數據庫,或者靜等緩存失效)
至此,Discuz https啟用成功,當然,在訪問某些頁面的時候,可能鎖會打上叉。因為頁面中加載了其他http內容。可能是統計代碼、QQ分享代碼、QQ秀頭像等,這部分服務暫時沒有提供https協議,因而無法啟用。只能等待Discuz進一步支持https。
到此,你應該可以看到綠色的https標志了。


發表評論 取消回復