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

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

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

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

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