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 · Mar 5, 2018 · 11787 views
    This topic created in 3015 days ago, the information mentioned may be changed or developed.
    怎么解决,难道要在续期证书的时候执行 reload 吗
    38 replies    2018-03-05 14:23:28 +08:00
    linxu
        1
    linxu  
       Mar 5, 2018
    crontab,重启 nginx
    SEARCHINGFREE
        2
    SEARCHINGFREE  
       Mar 5, 2018
    周一凌晨 3 点半 restart (
    wweir
        3
    wweir  
       Mar 5, 2018 via Android
    --dry
    shooyaaa
        4
    shooyaaa  
       Mar 5, 2018
    nginx -s reload
    tammy
        5
    tammy  
       Mar 5, 2018   ❤️ 1
    @shooyaaa #4 restart 才会重新读取证书吧
    mikulch
        6
    mikulch  
       Mar 5, 2018
    哎?我记得以前我使用 docker 的 nginx 与 let's Encrypt 是可以自动刷新证书的呢。
    sujin190
        7
    sujin190  
       Mar 5, 2018   ❤️ 1
    肯定需要 reload 啊,nginx 启动的时候所有需要的配置就已经被加载到内存了,如果每次请求去读那还不慢死了,你不 reload nginx 怎么知道你要重新加载的啊
    BOYPT
        8
    BOYPT  
       Mar 5, 2018   ❤️ 1
    神器 caddy 了解一下
    ColinZeb
        9
    ColinZeb  
    OP
       Mar 5, 2018
    @sujin190 我在想证书的 cron 里能不能加一条 reload 的命令
    ColinZeb
        10
    ColinZeb  
    OP
       Mar 5, 2018
    @BOYPT 不熟悉这个。不能只因为证书就换掉 nginx 吧
    lanjz
        11
    lanjz  
       Mar 5, 2018
    > 在 NGINX 上配置 HTTPS---血的教训

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

    另外你以为各种 certbot、acme 的 post hook 是干嘛用的?
    lanjz
        16
    lanjz  
       Mar 5, 2018
    @ColinZeb 我以前一直是 reload 的,确实大部分情况下 reload 没问题。不过前几天出了一个 https 的奇怪的问题,各种
    nginx -s reload 都没生效。最后 nginx -s stop && nginx 后解决了。然后搜了下看到了那个,没有深入研究。
    rrfeng
        17
    rrfeng  
       Mar 5, 2018 via Android
    reload 即可
    jlkm2010
        18
    jlkm2010  
       Mar 5, 2018
    用的 traefik,爽歪歪
    sunny00123
        20
    sunny00123  
       Mar 5, 2018   ❤️ 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  
       Mar 5, 2018
    @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  
       Mar 5, 2018
    @lanjz #11
    flynaj
        23
    flynaj  
       Mar 5, 2018 via Android
    照着做就行了 https://github.com/Neilpang/acme.sh/wiki/说明

    用 nginx force-reload
    Senorsen
        24
    Senorsen  
       Mar 5, 2018
    @tammy 不需要 restart。reload 可以获取证书。
    Senorsen
        25
    Senorsen  
       Mar 5, 2018
    说 reload 不行的,检查一下是不是 pid 文件设置错误之类的,导致 SIGHUP 没发过去。
    kenX
        26
    kenX  
       Mar 5, 2018
    楼上没有一个人说 acme.sh 的--install-cert 选项?
    jiangming1399
        27
    jiangming1399  
       Mar 5, 2018 via Android
    服务 reload 不行的试试 force-reload ?
    ColinZeb
        28
    ColinZeb  
    OP
       Mar 5, 2018 via iPhone
    @kenX 这个功能并不好用,涉及到配置文件匹配修改。每个人写法都不一样,所以很难匹配
    smileawei
        29
    smileawei  
       Mar 5, 2018
    要 reload 的。
    anubu
        30
    anubu  
       Mar 5, 2018
    @jlkm2010 最近刚接触 traefik,好像也碰到了这个问题。traefik 好像内置支持 Let's Encrypt 证书的自动续期和自动更新,但对自购证书,或者外部 Let's Encrypt 自动续期的证书也无法自动加载,似乎还是需要手动重启 traefik。
    jackroyal
        31
    jackroyal  
       Mar 5, 2018 via Android
    有可能是证书目录的权限有问题,证书更新了,但是写入目录失败。我的当时就是这样
    rockyou12
        32
    rockyou12  
       Mar 5, 2018
    我司是 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  
       Mar 5, 2018
    改用 caddy 了。
    iiduce
        34
    iiduce  
       Mar 5, 2018
    @BOYPT
    @nullen
    求分享下 nginx 切换到 caddy 有什么要注意的地方吗?
    BOYPT
        35
    BOYPT  
       Mar 5, 2018   ❤️ 1
    @iiduce #34 一般来说就是 80 和 443 都让 caddy 监听就非常无痛了。
    caddy 的配置异常简洁,各种功能配置都是现成。另外有个 forwardproxy plugin 很适合 fq
    nullen
        36
    nullen  
       Mar 5, 2018   ❤️ 1
    @iiduce 我额外开启了 tlsv1.0 的支持。其他没什么特别的。
    iiduce
        37
    iiduce  
       Mar 5, 2018
    @BOYPT
    @nullen 感谢,我看看文档,切换试试。
    kohos
        38
    kohos  
       Mar 5, 2018
    caddy 官网写了做商业使用要收费……怕以后出问题,个人网站用用就算了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2933 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 06:53 · PVG 14:53 · LAX 23:53 · JFK 02:53
    ♥ Do have faith in what you're doing.