LNMP下配置Let’s Encrypt证书及解决WordPress未显示绿锁

网站使用SSL对其进行TLS/SSL加密访问,让网站的访问更加安全,另一方面浏览器地址栏上绿色的小锁也很不错,因此推荐使用SSL证书,其实本来一直都想打算在NameCheap上购买个人的DV证书,结果看了下好多大佬的网站都是用Let’s Encrypt的SSL证书,因此我也打算用Let’s Encrypt。

moving-wordpress-to-https-with-lets-encrypt

关于我为什么打算使用Let’s Encrypt的SSL呢?我是看见了几个国内大佬和台湾几个博客的大佬都使用了Let’s Encrypt的SSL,加上看Mozilla基金会Akamai和思科等巨头都对Let’s Encrypt项目进行了赞助。对啦!还有LNMP安装包里支援的也是Let’s Encrypt,所以决定使用Let’s Encrypt的证书。(不过LNMP官网用的竟然不是Let’s Encrypt)

测试环境

系统环境:CentOS 7 ×64

LNMP版本:1.4

一、安装Crontab

由于Let’s Encrypt的SSL证书只有3个月的使用期限,到期后需要续期后才可以继续免费使用。至于怎么续期的话,LNMP下已经配置Let’s Encrypt的SSL证书后会自动设置一个(crontab -e)定时任务,可以自动完成Let’s Encrypt的自动续期任务。

yum install vixie-cron

yum install crontabs

二、LNMP新建网站使用Let’s Encrypt

在LNMP1.4及测试的1.5版本中都支援一键对网站进行Let’s Encrypt的SSL添加。

1.添加虚拟主机。

lnmp vhost add

2.配置虚拟主机,在提示Add SSL Certificate时选y,使用Let’s Encrypt的SSL选择2即可。

lnmp-ssl1-step1

(点击放大)

3.提示后,输入邮箱即可等待自动配置即可。由于Let’s Encrypt的使用期限仅仅为3个月,因为输入邮箱后可以等Let’s Encrypt快到期后,邮件提醒你续期,当然也是免费的了。不过LNMP下是可以自动续期的。

三、LNMP已有网站使用Let’s Encrypt

如果你的网站已经使用LNMP,但是并没使用任何的SSL证书,那么也可以简易的完成SSL证书的部署。

1.查看你的虚拟主机,并确定那个网站需要添加SSL证书。

lnmp vhost list

需要记录你网站的目录位置,一般情况下LNMP下的网站目录为:

/home/wwwroot/www.yourdomain.com/

请替换了上面的www.yourdomain.com为自己的网站的文件夹名称。

2.给以后网站添加SSL证书。

lnmp ssl add

填入需要配置Let’s Encrypt的SSL证书的域名及目录。

lnmp-ssl2-step1

(点击放大)

过上和上面的基本一样,也需要填入邮箱,以为Let’s Encrypt到期而提醒。

四、Let’s Encrypt证书自动续期

由于Let’s Encrypt的SSL证书,只有3个月的使用期限,每次到期后都需要续费,不过Let’s Encrypt的续期可以通过Certbot来完成,LNMP可以自动完成。

在配置Let’s Encrypt的SSL之前,第一步我就推荐先安装了Crontab,因为安装了Crontab后,LNMP配置Let’s Encrypt的SSL证书后即可,完成自动续期。由于现在新发现的几个Linux操作系统中均自带了Crontab,所以即使你忘记安装Crontab后也可以完成Let’s Encrypt的SSL自动续期。

如果你没有安装Crontab那么此时你的SSL证书无法完成自动续期的操作,那么首先需要安装Crontab,这个请看第一部分吧!检查,是否成功设置SSL的自动续期。

crontab -l

如果出现下图样子,那么说明你的SSL可以实现自动续期了。

lets-encrypt-auto-renew

(点击放大)

如果没有出现以上内容,可以通过编辑Crontab文件实现。

crontab -e

#添加以下定时任务

0 3 */7 * * /bin/certbot renew –disable-hook-validation –renew-hook “/etc/init.d/nginx reload”

至此可以实现,每隔7天后凌晨3点钟实现Let’s Encrypt的自动续期。

五、网站强制HTTPS链接

在LNMP下创建虚拟主机的时候,如果输入了带www和不带www的网站,最后建立好的虚拟主机访问时,无论输入网址时候是否带有www,最终都可以重定向到主域名上,其主要是通过301重定向进行实现的。

为了是所有的访问都能定向到HTTPS下,LNMP官方也是通过推荐301重定向实现的。

1.修改虚拟主机的配置文件,由于又改内容较大,不熟悉vim或者nano的人,还是下载到本地修改好在覆盖上传吧。配置文件的位置为:

/usr/local/nginx/conf/vhost/yourdomain.com

将yourdomain.com换成你自己的配置文件。

2.将配置文件修改为下面样子。

server {
        listen 443 ssl;
        server_name www.xzymoe.com xzymoe.com;
       省略其他配置
        } 

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

以上为LNMP官方推荐方法。我修改后,发现不行我将其修改为了433,是因为端口被占用的原因吧!!

3.重启Nginx即可

/usr/local/nginx/conf/vhost

此时,应该即使你输入的是http:// 的网址,也应该可以重定向到https://的网址了。

六、全站HTTPS并显示绿锁

如果你是在创建虚拟主机的时候就添加了SSL的话,那么基本可以说网站的所有页面和文章都应该可以在地址栏上显示一把绿色小锁。当然不排除主题文件里引用的CSS是不安全的链接,因而没有全站绿色小锁。

我的网站部署SSL的时候,可以实现了https打开,并且均能301重定向到https://www.xzymoe.com/,然后部分页面HTTPS链接下显示显示不安全链接,而又的页面又可以显示安全链接。当然这是不可以的,必须全站都是HTTPS,并且各大浏览器均显示绿锁,这样才能算稍微完美点。

1.修改WordPress站点地址,登陆WordPress后台——设置——常规,将WordPress地址和站点地址的URL修改带有HTTPS的链接,修改后可能需要重新登陆WordPress后台。

wordpress-url-https

(点击放大)

2.如果以上还没有解决你的问题,我估计也没有解决,可以通过在浏览器中按F12查看控制台,从而寻找到不安全链接的地址。

not-safe-connect-console

(点击放大)

我在看不安全链接的时候没有截图( >﹏<。)~呜呜呜…… ,那些不安全的链接一般都会是红色表示出来,我看了下我的网站的不安全链接主要是一些媒体文件,并没有是HTTPS,因而部分网页打开没有显示绿色小锁。这样仅仅需要将媒体文件的地址也替换为HTTPS即可,虽然在PHPmyadmin中一个SQL命令即可实现,而我严重不推荐此方法,无论你对SQL命令熟不熟悉。

3.不用SQL命令修改数据库的话,那么可以修改function.php文件来实现,仅需在function.php文件下添加一下代码。

/* 替换图片链接为 https */
function https_image_replacer($content){
    if( is_ssl() ){
        $host_name = $_SERVER['HTTP_HOST'];
        $http_host_name='http://'.$host_name.'/wp-content/uploads';
        $https_host_name='https://'.$host_name.'/wp-content/uploads';
        $content = str_replace($http_host_name, $https_host_name, $content);
    }
    return $content;
}
add_filter('the_content', 'https_image_replacer');

修改保存后,网站可以实现全站HTTPS访问下都显示绿色小锁。

其实我刚开始修改后,无论怎么修改都没有实现显示绿色小锁,后来才想起来是因为缓存插件没有关闭,并清除缓存,因而在修改后或者修改前一定要关闭缓存类插件,并且清空缓存。

七、备份Let’s Encrypt证书

如果你要更换VPS搬家时,虽然你可以重新申请SSL再次轻易部署,当然如果你的证书时间还多,你也可以通过打包带走。

1.首先以上操作,最麻烦的就是301重定向的时候是最为麻烦的过程,所以可以把Nginx的配置先备份了。配置文件路径:

/usr/local/nginx/conf/vhost/yourdomain.com

2.证书文件备份。证书文件在letsencrypt的文件夹里的相应域名文件夹下,不过我建议将letsencrypt文件夹直接备份。文件夹路径:

/etc/letsencrypt/

3.如果你在新的LNMP下还原了以上内容后,会发现无法重启Nginx,那么你可能还需要备份的东西是:

/usr/local/nginx/conf/ssl/

4.还原好以上内容后,可以通过重启Nginx进行生效。

5.至于自动续期的话,那么可以按照Certbot官网的教程进行Certbot的配置。

https://certbot.eff.org/

其实网站配置SSL总体过程比较简单的,加上HTTPS的网站有更好的安全性,因而推荐大家都开始会用SSL证书。

发表评论