Certbot + Nginx 自动更新证书没有成功的问题

国庆前,腾讯云的 CDN 就给我各种邮件、短信提示,说我证书要到期啦,赶紧更新,看看证书时间到10月15日,拖到节后来看。期间腾讯云真的是每天都给我发信息和邮件轰炸让我赶紧换证书。

看了看自动运行的脚本日志,一直在稳定运行:

-----update_push_cert.sh-----
-----create by: YuLaiZ-----
-----update time:2018-09-17 04:00:01-----
-----certbot update begin-----
-----certbot update end-----
-----qcloud cdn push begin-----
-----qcloud cdn push end-----
-----nginx reload begin-----
-----nginx reload end-----
-----you can see log in /usr/update_push_cert/logs/upc.log-----

-----update_push_cert.sh-----
-----create by: YuLaiZ-----
-----update time:2018-09-24 04:00:01-----
-----certbot update begin-----
-----certbot update end-----
-----qcloud cdn push begin-----
-----qcloud cdn push end-----
-----nginx reload begin-----
-----nginx reload end-----
-----you can see log in /usr/update_push_cert/logs/upc.log-----

-----update_push_cert.sh-----
-----create by: YuLaiZ-----
-----update time:2018-10-01 04:00:01-----
-----certbot update begin-----
-----certbot update end-----
-----qcloud cdn push begin-----
-----qcloud cdn push end-----
-----nginx reload begin-----
-----nginx reload end-----
-----you can see log in /usr/update_push_cert/logs/upc.log-----

-----update_push_cert.sh-----
-----create by: YuLaiZ-----
-----update time:2018-10-08 04:00:01-----
-----certbot update begin-----
-----certbot update end-----
-----qcloud cdn push begin-----
-----qcloud cdn push end-----
-----nginx reload begin-----
-----nginx reload end-----
-----you can see log in /usr/update_push_cert/logs/upc.log-----

看了一下证书,已经修改软链接到新证书上了:

[root@VM_0_9_centos yulaiz.com]# ll
total 8
lrwxrwxrwx 1 root root   34 Sep 17 04:00 cert.pem -> ../../archive/yulaiz.com/cert2.pem
lrwxrwxrwx 1 root root   35 Sep 17 04:00 chain.pem -> ../../archive/yulaiz.com/chain2.pem
lrwxrwxrwx 1 root root   39 Sep 17 04:00 fullchain.pem -> ../../archive/yulaiz.com/fullchain2.pem
lrwxrwxrwx 1 root root   37 Sep 17 04:00 privkey.pem -> ../../archive/yulaiz.com/privkey2.pem
-rw-r--r-- 1 root root 1675 Oct 12 16:09 privkey.pem.tmp
-rw-r--r-- 1 root root  682 Jul 17 15:40 README

新证书在9月17号那次定时脚本运行的时候就更新了

[root@VM_0_9_centos yulaiz.com]# ll
total 32
-rw-r--r-- 1 root root 2240 Jul 17 15:40 cert1.pem
-rw-r--r-- 1 root root 2240 Sep 17 04:00 cert2.pem
-rw-r--r-- 1 root root 1647 Jul 17 15:40 chain1.pem
-rw-r--r-- 1 root root 1647 Sep 17 04:00 chain2.pem
-rw-r--r-- 1 root root 3887 Jul 17 15:40 fullchain1.pem
-rw-r--r-- 1 root root 3887 Sep 17 04:00 fullchain2.pem
-rw-r--r-- 1 root root 1704 Jul 17 15:40 privkey1.pem
-rw-r--r-- 1 root root 1704 Sep 17 04:00 privkey2.pem

先手动把 CDN 干掉,直接域名解析到服务器,看一下,还是旧证书。

先看一下定时脚本:

#!/bin/bash
echo ""
echo ""
echo ""
echo "-----update_push_cert.sh-----"
echo "-----create by: YuLaiZ-----"
DATE=$(date +%Y-%m-%d)
TIME=$(date +%H:%M:%S)
echo "-----update time:"$DATE $TIME"-----"

echo "-----certbot update begin-----"
/usr/certbot/certbot-auto renew --quiet
echo "-----certbot update end-----"

echo "-----qcloud cdn push begin-----"
java -jar /usr/update_push_cert/qcloud-cdn-https-1.0.jar
echo "-----qcloud cdn push end-----"

echo "-----nginx reload begin-----"
/usr/local/nginx/sbin/nginx -s reload
echo "-----nginx reload end-----"

echo "-----you can see log in /usr/update_push_cert/logs/upc.log-----"
echo ""
echo ""
echo ""

刚刚已经将 CDN 取消了关联,那么脚本中向 CDN 推送证书的过程成不成功都无所谓,证书都有了,页面上没刷新出来,显然问题出在 Nginx 上面。

Nginx 的配置如下:

server {
        listen 443;
        server_name yulaiz.com;
        ssl on;
        ssl_certificate '/etc/letsencrypt/live/yulaiz.com/fullchain.pem';
        ssl_certificate_key '/etc/letsencrypt/live/yulaiz.com/privkey.pem';
        #省略...
        }

当时为了全自动,直接将 Nginx 的证书配置为一直永久最新的 fullchain.pem 以及 privkey.pem 上,也就是软连接上,导致软连接更新后,Nginx 在 reload 的时候没有检测到变动,没有重新加载,那么只好彻底重启。

先手动重启 Nginx,使用 stop/start 操作重启后果然证书就刷新到最新了,网站上面也显示正常。

简单修改一下定时脚本,问题搞定。

网上好多都是 reload 即可,难道我的 Nginx 有毒??

发表评论

发表回复

*

沙发空缺中,还不快抢~