wordpress由http转为全站https过程小计,nginx+Let’s Encrypt+Centos7

随着Chrome浏览器力推HTTPS,在浏览http的网站时已经是不安全的状态了。Https的好处自然不用多说,博主也是一时手痒,折腾了一下午,终于大功告成,在这里分享一下过程.

一、准备工作

如果是虚拟空间用户,首先需要看自己的空间是否支持https,比如博主使用的阿里云免费空间,就不支持…这就尴尬了,于是先将网站迁至朋友的ECS。

个人站来说肯定是喜欢免费的证书,网上查了很多免费证书,有Let’s Encrypt、StartSSL,国内的有Wosign沃通SSL等。综合考虑,博主最终选择了Let’s Encrypt,毕竟它来头不小,是由Mozilla、思科、Akamai、IdenTrust和EFF等组织发起的,目前几乎所有的主流浏览器都已经宣布支持,缺点就是有效期比较短,只有三个月,每三个月需要续期一次,并且不支持通配符(话说免费证书有几家支持呢?)。

目前Let’s Encrypt推荐的证书申请方式是使用certbot,网址为:https://certbot.eff.org/

二、安装certbot

sudo yum -y install epel-release
sudo yum -y install certbot

三、获取证书

certbot提供了很多插件用于获取和安装证书,比如webroot等等。目前官方文档推荐两种证书获取方式(二选一)。

1.如果已有服务在运行的情况下,webroot插件是个不错的选择。

certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com

将/var/www/example替换成网站根目录,example.com换成自己的域名,如果需要给多个子域名申请证书,则增加对应的-w和-d参数。该命令会在你指定的服务器目录/var/www/example中放置一些文件,用以证明域名是属于自己的。博主没有采用这种方式,因为本人有几个子域名是采用反向代理的方式,指定根目录无效。

2.如果服务可以停止的话,使用standalone参数也是极好的。

certbot certonly --standalone -d example.com -d www.example.com

用这种方式获取证书时需要暂停服务,将本机的80和443端口占用让出来,这种方法好处是证书一定可以获取成功,坏处是需要暂停服务。

如果运行顺利,到现在服务器所需要的证书就已经生成好了。他们被放在了 /etc/letsencrypt/live/example.com/下,由于不知道该备份哪些文件,博主干脆将整个 /etc/letsencrypt目录给备份了出来。

P.S. 该步骤常见问题

采用第二种方式获取证书的,如果申请失败(比如报错Failed to connect to xxxx),请检查域名是否解析到该服务器,本人域名由于使用了cdn服务,导致这一步始终失败,最后将域名解析回服务器,再次执行命令才通过!

四、配置Nginx

该步骤需要Nginx在编译安装nginx时启用了ngx_http_ssl_module,也就是加了–with-http_ssl_module参数,运行命令nginx -V来查看自己的nginx在编译时使用了哪些参数,如果没有–with-http_ssl_module,也不用重装那么麻烦,进入nginx的源码目录,执行如下命令:

#重新configure,别忘了带上之前就有的参数
./configure \ 
 --with-http_ssl_module
#然后make,注意,没有make install
make
#备份原有nginx程序
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
#将新编译的程序替换原有程序
cp ./objs/nginx /usr/local/nginx/sbin/

如此就完成了nginx新模块的添加。下面修改nginx配置文件以启用网站ssl:

listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

运行nignx -t测试没问题的话就可以nginx -s reload来重新加载配置了。

P.S. 该步骤建议

建议在此步骤增加http请求301跳转至https请求,以本站为例,配置如下:

server {
 listen 80;
 server_name yimik.com www.yimik.com blog.yimik.com;
 return 301 https://blog.yimik.com$request_uri;
}

五、证书续期

关于证书续期,官网的建议是将续期命令加入系统定时执行,在这里不在赘述。下面是步骤:

#先运行该命令尝试续期
certbot renew --dry-run 
#如果上面命令运行没有问题,则可将下面的命令加入系统定时执行,定时周期必须小于3个月,否则证书会过期
certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"

六、更改wordpress站内链接

由于已经全站https,所以需要将原来系统中的站内http链接改为站内https链接,以本站为例在数据库执行如下sql:

UPDATE wp_options SET option_value = replace( option_value, 'http://blog.yimik.com', 'https://blog.yimik.com' ) WHERE option_name = 'home' OR option_name = 'siteurl'; 
UPDATE wp_posts SET post_content = replace( post_content, 'http://blog.yimik.com', 'https://blog.yimik.com' ) ; 
UPDATE wp_posts SET guid = replace( guid, 'http://blog.yimik.com', 'https://blog.yimik.com' ) ; 

 

1条评论

发表评论

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

😉😐😡😈🙂😯🙁🙄😛😳😮:mrgreen:😆💡😀👿😥😎😕

验证码 *