V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
NGINX
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 · 10389 次点击
    这是一个创建于 2215 天前的主题,其中的信息可能已经有所发展或是发生改变。
    怎么解决,难道要在续期证书的时候执行 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
    # 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"
    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   ·   我们的愿景   ·   实用小工具   ·   3845 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:32 · PVG 18:32 · LAX 03:32 · JFK 06:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.