【问题标题】:Restart Nginx or reload certificate cache on cert change重新启动 Nginx 或在证书更改时重新加载证书缓存
【发布时间】:2020-10-07 10:39:14
【问题描述】:

背景:

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

它运行 3 个非根容器:

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

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

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

问题:

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

提前感谢您的帮助!

【问题讨论】:

    标签: django docker ssl nginx


    【解决方案1】:

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

    一些选项:

    • 使用主机cron重新加载nginx

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

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

    【讨论】:

    • 即使我重新加载 nginx,我也得到了相同的证书
    • 我推荐使用nginx -t && nginx -t reload,这样任何无效的配置都不会导致您的网站在半夜宕机。
    猜你喜欢
    • 1970-01-01
    • 2022-10-02
    • 2018-12-12
    • 2021-06-12
    • 2011-05-18
    • 2019-12-02
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多