技术解析

Let's Encrypt 自动续期的证书 nginx 不会自动刷新
0
2021-05-20 23:59:38
idczone
怎么解决,难道要在续期证书的时候执行国外服务器 reload 吗
crontab,重启 nginx

周一凌晨 3 点半 restart (

--dry

nginx -s reload

restart 才会重新读取证书吧

哎?我记得以前我使用 docker 的 nginx 与 let's Encrypt 是可以自动刷新证书的呢。

肯定需要 reload 啊,nginx 启动的时候所有需要的配置就已经被加载到内存了,如果每次请求去读那还不慢死了,你不 reload nginx 怎么知道你要重新加载的啊

神器 caddy 了解一下

我在想证书的 cron 里能不能加一条 reload 的命令

不熟悉这个。不能只因为证书就换掉 nginx 吧

> 在 NGINX 上配置 HTTPS---血的教训
http://www.cnblogs.com/aguncn/p/4237083.html

certbot 的话可以用 post-hook

如果只是更新证书应该是 reload 就行了吧,我记得我上次就是 reload 解决的。

我用的 acme.sh 我查了文档没查到相关说明

我就是因为证书就换掉 nginx 的。
另外你以为各种 certbot、acme 的 post hook 是干嘛用的?

我以前一直是 reload 的,确实大部分情况下 reload 没问题。不过前几天出了一个 https 的奇怪的问题,各种
nginx -s reload 都没生效。最后 nginx -s stop && nginx 后解决了。然后搜了下看到了那个,没有深入研究。

reload 即可

用的 traefik,爽歪歪

https://github.com/Neilpang/acme.sh/wiki/Using-'--pre-hook',-'--post-hook',-'--renew-hook'-and-'--reload-cmd'
看看这个是不是你要的?

/etc/cron.d/certbot: crontab entries for the certbot package
/>Upstream recommends attempting renewal twice a day
/>Eventually, this will be an opportunity to validate certificates
haven't been revoked, etc. Renewal will only occur if expiration
is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
0 */12 * * * root certbot renew --quiet --rsa-key-size 4096 --must-staple --post-hook "/etc/init.d/nginx reload"



reload 即可
30 2 * * 1 /usr/local/python/bin/certbot renew --force-renew --renew-hook "/etc/init.d/nginx reload"

#11

照着做就行了 https://github.com/Neilpang/acme.sh/wiki/说明
用 nginx force-reload

不需要 restart。reload 可以获取证书。

说 reload 不行的,检查一下是不是 pid 文件设置错误之类的,导致 SIGHUP 没发过去。

楼上没有一个人说 acme.sh 的--install-cert 选项?

服务 reload 不行的试试 force-reload ?

这个功能并不好用,涉及到配置文件匹配修改。每个人写法都不一样,所以很难匹配

要 reload 的。

最近刚接触 traefik,好像也碰到了这个问题。traefik 好像内置支持 Let's Encrypt 证书的自动续期和自动更新,但对自购证书,或者外部 Let's Encrypt 自动续期的证书也无法自动加载,似乎还是需要手动重启 traefik。

有可能是证书目录的权限有问题,证书更新了,但是写入目录失败。我的当时就是这样

我司是 nginx 集群,用的也是 acme.sh 来签,其实规划好了是可以自动更新的,只需要写好脚本。
acme.sh 有 reloadcmd 功能,更新的时候会调用的
https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8Ebash
HOST_NAME="your.domain.me"
~/.acme.sh/acme.sh --issue --dns dns_ali --force \
-d ${HOST_NAME} \
-d "domain1.${HOST_NAME}" \
-d "domain2.${HOST_NAME}"
~/.acme.sh/acme.sh --installcert -d ${HOST_NAME} \
--certpath /etc/ansible/ssl_cert/${HOST_NAME}/cert.cer \
--keypath /etc/ansible/ssl_cert/${HOST_NAME}/key.cer \
--fullchainpath /etc/ansible/ssl_cert/${HOST_NAME}/fullchain.cer \
--reloadcmd "ansible-playbook /etc/ansible/playbooks/nginx_cert_deliver.yml --extra-vars \"host_name=${HOST_NAME}\""

改用 caddy 了。



求分享下 nginx 切换到 caddy 有什么要注意的地方吗?

一般来说就是 80 和 443 都让 caddy 监听就非常无痛了。
caddy 的配置异常简洁,各种功能配置都是现成。另外有个 forwardproxy plugin 很适合 fq

我额外开启了 tlsv1.0 的支持。其他没什么特别的。


感谢,我看看文档,切换试试。

caddy 官网写了做商业使用要收费……怕以后出问题,个人网站用用就算了

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服