心血来潮想把网站转成https的,原本以为很简单,没想到过程当中还有不少需要注意的地方,特此记录一下。

1. ssl证书申请

这个最简单了,我申请的是wosign的免费证书,一直下一步就好了,唯一需要注意的就是域名要写对。

2. nginx配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
server {
    listen       443;
    server_name  sosonemo.me;

    ssl                  on;
    keepalive_timeout    70;
    ssl_certificate      /path/to/crt;
    ssl_certificate_key  /path/to/key;

    ssl_session_timeout  5m;

    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers RC4:HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    .....
    .....
}

ssl部分的配置是从nginx的文档里找的,协议那里原本有SSLv3,但是听说有漏洞,所以我删了。

3. 坑之wordpress站点地址

我原来博客的域名是带www的,申请证书的时候没填,在域名解析那里把www解析删掉之后以为万事大吉了,结果打开网站一直自动往www的二级域名跳。后来才知道wordpress设置里有一个站点的选项需要改一下。网站打不开了,果断直接改数据库。。

4. 坑之googleapis

wordpress用了谷歌的开源字体,google被墙以后,wordpress打开巨慢。解决办法是改wp-includes/script-loader.php文件,把里边含有fonts.googleapis.com的那行注释掉就行。不过这也是个权宜之计,wp升级之后这个文件会被改回去- -!

另外,如果使用的主题也调用了开源字体或都googleapis的东西,也需要改一下。

5. 坑之多说评论

转https之后,前后台的多说评论都不正常了,浏览器提示阻止打开不安全的链接。

查看多说插件的代码后发现代码里都是写死的调用http的页面,经测试,相应的https页面也可以正常访问,所以只需要把代码里的http改成https就好了。

我在duoshuo.php里加了一个函数,返回应该使用的scheme

1
2
3
4
5
6
7
<?php
function scheme(){
	if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on'){
		return 'https://';
	}
	return 'http://';
}

后台的显示需要改5个文件:manage.phpprofile.phpthemes.phpstatistics.phppreferences.php

前台显示需要改1个文件:wordpress.php

最后,吐槽一下wordpress。wp的代码组织真叫一个烂啊,php代码和html混杂在一起,函数定义和执行“交相辉映”,感觉完全是上个世纪的代码书写风格。有谁知道好的博客程序别忘了告诉我啊,我想换掉这货了。