关于 Discuz! (X3.1) 开启https的那些事

2018 年更新:本文内容可能已过时,仅供参考。目前建议升级至 Discuz! X3.4,对 https 有更好的兼容性。如果升级后仍有问题,可参考本文内容进行排查。

本文由Coxxs原创,转载请注明本文链接:http://coxxs.me/111

时代一直在发展,我们对于安全通信的需求也越来越高。在 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,但是因为我的主机配置问题,无法采用这种方式识别。除了将配置修改正确外(如果是虚拟空间用户可能无法修改),也可以直接对Discuz程序进行一些调整(使用 $_SERVER[‘SERVER_PORT’] 来判断)。

source/class/discuz/discuz_application.php(约第187行处):

查找:

[php]$_G[‘isHTTPS’] = ($_SERVER[‘HTTPS’] && strtolower($_SERVER[‘HTTPS’]) != ‘off’) ? true : false;[/php]

修改为:

[php]$_G[‘isHTTPS’] = ($_SERVER[‘SERVER_PORT’] == 443 || $_SERVER[‘HTTPS’] && strtolower($_SERVER[‘HTTPS’]) != ‘off’) ? true : false;[/php]

uc_server/avatar.php (约第13行处):

查找:

[php]define(‘UC_API’, strtolower(($_SERVER[‘HTTPS’] == ‘on’ ? ‘https’ : ‘http’).’://’.$_SERVER[‘HTTP_HOST’].substr($_SERVER[‘PHP_SELF’], 0, strrpos($_SERVER[‘PHP_SELF’], ‘/’))));[/php]

修改为:

[php]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’], ‘/’))));[/php]

修改过后,更新缓存,发现大多数链接都变成了https。

2.2、后台设置

在后台还有一些设置,可能会干扰https的使用

后台 > 站长 > UCenter设置 > UCenter 访问地址,修改为https开头的

UCenter后台 > 应用管理 > 应用的主URL,修改为https开头

另外在 后台 > 全局 > 域名设置 中的一些设置也可能使https失效,如果进行了之前的几步还是无法启用,可以暂时删除这里的设置试试。

3、清理缓存

设置完成之后,需要清理缓存,使设置生效。

清理缓存及内存缓存,如果设置了帖子缓存,还需清理数据库内的缓存(清空相应cache数据库,或者静等缓存失效)

至此,Discuz https启用成功,当然,在访问某些页面的时候,可能锁会打上叉。因为页面中加载了其他http内容。可能是统计代码、QQ分享代码、QQ秀头像等,这部分服务暂时没有提供https协议,因而无法启用。只能等待Discuz进一步支持https。

关于 Discuz! (X3.1) 开启https的那些事》有12个想法

  1. 我照你的做了。和UC的通讯始终失败啊,你是怎么设置的?

    你有没有开启强制跳转?

  2. 根本不行,3.1和3.2测试都不行,站长你不要乱说好吗?

  3. 升级https后,使用ff上传图片报Server(IO)Error,IE10没有这个问题,请问你遇到了么?

    1. 我的论坛是部分用户有这个问题,升级ssl就会出现无法上传图片的情况。但大部分用户正常。搞不懂。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注