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

时间:2020-06-17 14:53:30

标签: django docker ssl nginx

背景

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

它运行3个非根容器:

  • 容器1:Gunicorn,Django,Certbot
  • 容器2:Nginx
  • 容器3:PostgreSQL

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

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

问题:

如果证书更改,自动重新加载Nginx的最佳方法是什么?还是可以在不重新启动服务器的情况下清除证书的证书缓存?您在这里有什么建议?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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

一些选项:

  • 使用主机cron重新加载nginx

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

  • 使用certbot部署钩子(您需要在nginx容器中运行certbot或考虑使该部署钩子变为远程的方法)
/etc/letsencrypt/cli.ini:
deploy-hook = nginx -s reload