【发布时间】:2018-08-11 09:16:19
【问题描述】:
我有一台服务器在内部端口上运行一些 NodeJs 应用程序(准确地说是 MeteorJs)。我将 Nginx 用于proxy_pass 将 URL 定位到应用程序的请求。
假设app_1 在localhost:3000 上运行,我会将app1.domain.com 代理传递给localhost:3000,然后添加防火墙规则以限制对端口3000 的访问。
然后我使用letsencrypt在app1.domain.com的传入连接上添加SSL。我使用certbot certonly -w /var/www/app1 -d app1.domain.com 生成证书,然后设置 nginx 配置文件以使用它。
在更新证书之前一切正常。
要进行续订,我有以下 cron 工作:
12 6 * * 3 /root/renew.sh
使用以下脚本/root/renew.sh:
certbot renew
service nginx reload
我遇到的问题是,在到期时,nginx 网络服务器不提供新证书!
所以我添加了以下 cron 作业:
30 6 * * 3 service nginx restart
但它仍然无法刷新证书(这会导致导航器出错,说由于证书过期而连接不安全)。所以我需要手动登录并重新加载nginx。
我的设置有什么问题?
谢谢
【问题讨论】:
-
你解决了吗?我只能认为 nginx reload 还不够,可能需要停止启动。除此之外,是否可以选择使用 MeteorUp: github.com/zodern/meteor-up ?它使用 docker 并内置 Lets Encrypt。
-
我还没有解决这个问题,我需要花时间深入研究 cron 作业日志......我确认重新加载足以在我手动执行时考虑新证书。就我而言,MeteorUp 不是一个选项,但我会看看他们如何更新证书。
-
我刚刚想到的唯一另一件事是 cron 作业可能需要以 root / sudo 用户身份运行。