证书更改时重新启动 Nginx 或重新加载证书缓存

das*_*nni 11 django ssl nginx docker

背景:

我正在 Docker 内运行一个应用程序,该应用程序将由通常对 Docker 本身不了解的随机用户管理。我正在构建的应用程序可以从网络服务器本身进行尽可能多的配置。

它运行 3 个非根容器:

  • 容器1:Gunicorn、Django、Certbot
  • 容器2:Nginx
  • 容器3:Postgresql

我可以让 Django 应用程序通过网站本身运行 certbot 来获取证书并将证书复制到 nginx 正在使用的卷中。但是旧的或自签名的证书似乎在启动时被 nginx 缓存,因此直到 nginx 重新启动后才使用新证书。

问题是,我现在必须重新启动 nginx 或以某种方式自动重新加载证书。通过卷曲或其他方式触发从 Django 容器到 Nginx 容器的重新启动。或者我可以使用看门狗之类的东西来监视文件的文件更改。

问题:

如果证书更改,自动重新加载 nginx 的最佳方法是什么?或者,即使不重新启动服务器,我也可以清除证书的证书缓存吗?您对此有何建议?

提前感谢您的帮助!

Far*_*ahi 14

重新加载应该足以加载新证书。

一些选项:

  • 使用主机 cron 重新加载 nginx

0 */6 * * * docker exec <nginx_container_name> nginx -s reload

  • 使用certbot部署钩子(你需要在nginx容器中运行certbot或者想办法让这个部署钩子远程)
/etc/letsencrypt/cli.ini:
deploy-hook = nginx -s reload
Run Code Online (Sandbox Code Playgroud)

  • “nginx -t”在这种情况下没有帮助(“nginx -s reload”),它已经进行了测试,如果配置错误则停止重新加载。引用[文档](https://nginx.org/en/docs/beginners_guide.html):...“它检查新配置文件的语法有效性并尝试应用其中提供的配置。”。 ..“否则,主进程将回滚更改并继续使用旧配置。” (4认同)
  • 我建议使用``nginx -t &amp;&amp; nginx -t reload``,这样任何无效的配置都不会导致你的网站在半夜宕机。 (2认同)