分類:技術

讓 Discuz! X 3.1/3.2 支援https(SSL/TLS)

時代一直在發展,我們對於安全通信的需求也越來越高。在 Discuz X3 中,據說支持了https,所以在我有了SSL證書後,第一時間就給網站加上了SSL。但加上之後,發現很多地方並沒有使用https鏈接,遂開始查看Discuz源碼,看看哪裡出了問題。

1、SSL證書&配置

首先,要開啟SSL,總得有一個證書吧?無論是正規CA頒發的,還是自己簽的,沒有肯定是不行的。如果沒有的話,先去申請個吧。(具體方法請谷歌,這裡不再贅述)

2、Discuz! 優化

2.1、程序調整

自 Discuz! X3 開始,已經加入了對https的支持,如果你使用https訪問論壇,論壇中的鏈接都會變成https。如果你發現大部分鏈接都已經使用了https,就代表Discuz已經自動識別了,此時,可以跳過本步,直接進入下一步。

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 || $_SERVER['HTTPS'] == 'on' ? 'https' : 'http').'://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/'))));

修改過後,更新緩存,發現大多數鏈接都變成了https。

2.2、後台設置

在後台還有一些設置,可能會干擾https的使用

後台 > 站長 > UCenter設置 > UCenter 訪問地址,修改為https開頭的

UCenter後台 > 應用管理 > 應用的主URL,修改為https開頭

另外在 後台 > 全局 > 域名設置 中的一些設置也可能使https失效,如果進行了之前的幾步還是無法啟用,可以暫時刪除這裡的設置試試。

3、清理緩存

設置完成之後,需要清理緩存,使設置生效。

清理緩存及內存緩存,如果設置了帖子緩存,還需清理數據庫內的緩存(清空相應cache數據庫,或者靜等緩存失效)

至此,Discuz https啟用成功,當然,在訪問某些頁面的時候,可能鎖會打上叉。因為頁面中加載了其他http內容。可能是統計代碼、QQ分享代碼、QQ秀頭像等,這部分服務暫時沒有提供https協議,因而無法啟用。只能等待Discuz進一步支持https。

轉自:https://www.cloudxns.net/Support/detail/id/356.html (部份內容經修改)

SSL/TLS的原理以及互聯網究竟是如何工作的(9)——想知道瀏覽網頁是個怎樣的過程嗎?3W工作室的成員們在此!

Chapter 1:愛吹牛的HTTP!

我:又有段時間沒來網絡工作室了。上次和TCP還有UDP聊了聊,這次去看望誰呢?
(走著走著,突然撞上了一個傢伙)

我:啊,撞到誰了?你是……

HTTP:(非常熱情的)Hi,幽靈,我是大名鼎鼎的HTTP(HyperText Transfer Protocol,超文本傳輸協議)啊,你平時上網最喜歡做的事情就是瀏覽網頁了吧?那就是要靠我才能做到啊:我負責客戶端(通常是瀏覽器,但現在越來越多的其他應用程序也開始用HTTP協議進行通信了,例如殺毒軟件更新病毒庫)和服務器端的通信,當你在瀏覽器地址欄內輸入URL(Uniform Resource Locater)並敲擊回車鍵之後,我就向網站服務器發出請求,服務器接收到請求之後就把網頁發送回來,然後你就看到網頁啦! 繼續閱讀