如何避免重新启动 nginx 来更新 letsencrypt 证书?

如何避免重新启动 nginx 来更新 letsencrypt 证书?

我已经安装了 Nginx 服务器来托管我的网站,并使用 LetsEncrypt 添加了 HTTPS。

问题是每次证书过期,我的网站就无法访问,我需要手动重新启动服务,因此每两个月左右我都被迫手动执行:

sudo service nginx restart

我已经尝试过几次自动化操作,但都失败了。我最后一次尝试使用这个:

sudo crontab -e 

0 0,12 * * * letsencrypt renew >/dev/null 2>&1 
1 0,12 * * * root /etc/init.d/nginx reload

这是错误的方法吗?我如何才能验证这项工作是否有效,而无需等待我的网站再次无法访问?

答案1

您可能希望添加每 3 个月执行一次的 cron 作业,这通常在使用 certbot 时完成。

Let's Encrypt 的证书有效期仅为 90 天。这是为了鼓励用户自动执行证书续订流程。我们安装的 certbot 包通过向 /etc/cron.d 添加续订脚本来帮我们处理此问题。此脚本每天运行两次,将自动续订任何在 30 天内到期的证书。

为了测试续订过程,您可以使用 certbot 进行试运行:

sudo certbot renew --dry-run

如果您没有看到任何错误,则一切就绪。必要时,Certbot 将更新您的证书并重新加载 Nginx 以获取更改。如果自动更新过程失败,Let's Encrypt 将向您指定的电子邮件发送一条消息,在您的证书即将过期时提醒您。

此外,除非您要移动证书,否则您不必重新启动 Nginx,一旦新证书生成,它就会从您离开的地方继续。当 SSL 证书更新时,它会被保存在同一位置吗?

答案2

只需使用此命令部署 docker 容器即可安装 letencrypt ssl 证书

docker run \
--name=letsencrypt \
--cap-add=NET_ADMIN \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Europe/London \
-e URL=your.domain.com \
-e VALIDATION=http \
-e EMAIL=****@gmail.com \
-e PROD=true \
-p 443:443 \
-p 80:80 \
-v /path/to/appdata/config:/config \
-d \
--restart unless-stopped \
linuxserver/letsencrypt

现在使用 /app/le-renew.sh 中的脚本自动更新证书,安装 crontab 来执行此操作

0 0 1 * * sudo docker exec letsencrypt /app/le-renew.sh

相关内容