Let's Encrypt 自动续期的证书 nginx 不会自动刷新 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
a href="http://trac.nginx.org/nginx/report" target="_blank">NGINX Trac
3rd Party Modules
Security Advisories
CHANGES
OpenResty
ngx_lua
Tengine
在线学习资源
NGINX 开发从入门到精通
NGINX Modules
ngx_echo
ColinZeb
V2EX    NGINX

Let's Encrypt 自动续期的证书 nginx 不会自动刷新

  •  
  •   ColinZeb
    ColinZeb 2018-03-05 09:44:59 +08:00 11277 次点击
    这是一个创建于 2785 天前的主题,其中的信息可能已经有所发展或是发生改变。
    怎么解决,难道要在续期证书的时候执行 reload 吗
    38 条回复    2018-03-05 14:23:28 +08:00
    linxu
        1
    linxu  
       2018-03-05 09:47:50 +08:00
    crontab,重启 nginx
    SEARCHINGFREE
        2
    SEARCHINGFREE  
       2018-03-05 09:50:35 +08:00
    周一凌晨 3 点半 restart (
    wweir
        3
    wweir  
       2018-03-05 09:52:47 +08:00 via Android
    --dry
    shooyaaa
        4
    shooyaaa  
       2018-03-05 09:55:06 +08:00
    nginx -s reload
    tammy
        5
    tammy  
       2018-03-05 09:58:27 +08:00   1
    @shooyaaa #4 restart 才会重新读取证书吧
    mikulch
        6
    mikulch  
       2018-03-05 10:09:39 +08:00
    哎?我记得以前我使用 docker 的 nginx 与 let's Encrypt 是可以自动刷新证书的呢。
    sujin190
        7
    sujin190  
       2018-03-05 10:12:23 +08:00   1
    肯定需要 reload 啊,nginx 启动的时候所有需要的配置就已经被加载到内存了,如果每次请求去读那还不慢死了,你不 reload nginx 怎么知道你要重新加载的啊
    BOYPT
        8
    BOYPT  
       2018-03-05 10:13:21 +08:00   1
    神器 caddy 了解一下
    ColinZeb
        9
    ColinZeb  
    OP
       2018-03-05 10:14:36 +08:00
    @sujin190 我在想证书的 cron 里能不能加一条 reload 的命令
    ColinZeb
        10
    ColinZeb  
    OP
       2018-03-05 10:15:45 +08:00
    @BOYPT 不熟悉这个。不能只因为证书就换掉 nginx 吧
    lanjz
        11
    lanjz  
       2018-03-05 10:17:56 +08:00
    > 在 NGINX 上配置 HTTPS---血的教训

    http://www.cnblogs.com/aguncn/p/4237083.html
    jessynt
        12
    jessynt  
       2018-03-05 10:19:56 +08:00
    certbot 的话可以用 post-hook
    ColinZeb
        13
    ColinZeb  
    OP
       2018-03-05 10:20:00 +08:00
    @lanjz 如果只是更新证书应该是 reload 就行了吧,我记得我上次就是 reload 解决的。
    ColinZeb
        14
    ColinZeb  
    OP
       2018-03-05 10:20:36 +08:00
    @jessynt 我用的 acme.sh 我查了文档没查到相关说明
    BOYPT
        15
    BOYPT  
       2018-03-05 10:21:35 +08:00
    @ColinZeb #10 我就是因为证书就换掉 nginx 的。

    另外你以为各种 certbot、acme 的 post hook 是干嘛用的?
    lanjz
        16
    lanjz  
       2018-03-05 10:23:13 +08:00
    @ColinZeb 我以前一直是 reload 的,确实大部分情况下 reload 没问题。不过前几天出了一个 https 的奇怪的问题,各种
    nginx -s reload 都没生效。最后 nginx -s stop && nginx 后解决了。然后搜了下看到了那个,没有深入研究。
    rrfeng
        17
    rrfeng  
       2018-03-05 10:23:36 +08:00 via Android
    reload 即可
    jlkm2010
        18
    jlkm2010  
       2018-03-05 10:28:29 +08:00
    用的 traefik,爽歪歪
    sunny00123
        20
    sunny00123  
       2018-03-05 10:50:45 +08:00   1
    # /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
    # s 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"
    xuhaoyangx
        21
    xuhaoyangx  
       2018-03-05 10:56:08 +08:00
    @tammy #5
    @ColinZeb #9

    reload 即可
    30 2 * * 1 /usr/local/python/bin/certbot renew --force-renew --renew-hook "/etc/init.d/nginx reload"
    xuhaoyangx
        22
    xuhaoyangx  
       2018-03-05 10:56:23 +08:00
    @lanjz #11
    flynaj
        23
    flynaj  
       2018-03-05 10:58:50 +08:00 via Android
    照着做就行了 https://github.com/Neilpang/acme.sh/wiki/说明

    用 nginx force-reload
    Senorsen
        24
    Senorsen  
       2018-03-05 11:04:14 +08:00
    @tammy 不需要 restart。reload 可以获取证书。
    Senorsen
        25
    Senorsen  
       2018-03-05 11:06:26 +08:00
    说 reload 不行的,检查一下是不是 pid 文件设置错误之类的,导致 SIGHUP 没发过去。
    kenX
        26
    kenX  
       2018-03-05 11:27:22 +08:00
    楼上没有一个人说 acme.sh 的--install-cert 选项?
    jiangming1399
        27
    jiangming1399  
       2018-03-05 11:36:44 +08:00 via Android
    服务 reload 不行的试试 force-reload ?
    ColinZeb
        28
    ColinZeb  
    OP
       2018-03-05 11:46:09 +08:00 via iPhone
    @kenX 这个功能并不好用,涉及到配置文件匹配修改。每个人写法都不一样,所以很难匹配
    smileawei
        29
    smileawei  
       2018-03-05 11:57:24 +08:00
    要 reload 的。
    anubu
        30
    anubu  
       2018-03-05 12:11:24 +08:00
    @jlkm2010 最近刚接触 traefik,好像也碰到了这个问题。traefik 好像内置支持 Let's Encrypt 证书的自动续期和自动更新,但对自购证书,或者外部 Let's Encrypt 自动续期的证书也无法自动加载,似乎还是需要手动重启 traefik。
    jackroyal
        31
    jackroyal  
       2018-03-05 12:34:00 +08:00 via Android
    有可能是证书目录的权限有问题,证书更新了,但是写入目录失败。我的当时就是这样
    rockyou12
        32
    rockyou12  
       2018-03-05 12:58:52 +08:00
    我司是 nginx 集群,用的也是 acme.sh 来签,其实规划好了是可以自动更新的,只需要写好脚本。
    acme.sh 有 reloadcmd 功能,更新的时候会调用的

    https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E#3-copy%E5%AE%89%E8%A3%85-%E8%AF%81%E4%B9%A6

    #!/usr/bin/env bash

    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}\""
    nullen
        33
    nullen  
       2018-03-05 13:02:09 +08:00
    改用 caddy 了。
    iiduce
        34
    iiduce  
       2018-03-05 13:28:06 +08:00
    @BOYPT
    @nullen
    求分享下 nginx 切换到 caddy 有什么要注意的地方吗?
    BOYPT
        35
    BOYPT  
       2018-03-05 13:33:27 +08:00   1
    @iiduce #34 一般来说就是 80 和 443 都让 caddy 监听就非常无痛了。
    caddy 的配置异常简洁,各种功能配置都是现成。另外有个 forwardproxy plugin 很适合 fq
    nullen
        36
    nullen  
       2018-03-05 13:35:32 +08:00   1
    @iiduce 我额外开启了 tlsv1.0 的支持。其他没什么特别的。
    iiduce
        37
    iiduce  
       2018-03-05 13:40:49 +08:00
    @BOYPT
    @nullen 感谢,我看看文档,切换试试。
    kohos
        38
    kohos  
       2018-03-05 14:23:28 +08:00
    caddy 官网写了做商业使用要收费……怕以后出问题,个人网站用用就算了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2605 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 03:22 PVG 11:22 LAX 20:22 JFK 23:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86