【问题标题】:How could i use let's encrypt behind a django application without stopping the server?我如何在不停止服务器的情况下使用让我们在 django 应用程序后面进行加密?
【发布时间】:2016-02-27 19:07:26
【问题描述】:

我有一个在服务器上运行的 django 应用程序。我想使用 let's encrypt 来提供加密连接。我可以使用他们的 ACME 客户端的独立选项,但我不想停止我的服务器,我必须这样做。

所以有 webroot 选项,它可以与我已经运行的网络服务器 (nginx) 一起使用。在这种情况下,Django 会处理请求。我的问题是,在 django 方面应该如何运行(记住自动续订几个月)?

【问题讨论】:

  • 您应该能够配置您的 Web 服务器(例如 Apache 或 Nginx)以提供所需的文件。
  • 你有什么想法,nginx怎么能做到这一点?在我的情况下,nginx 将请求转发到我的 gunicorn 套接字。
  • 添加一个 location 块,以便 Nginx 提供所需的文件,而不是将请求转发给 gunicorn。 Matthew 链接到的指南有说明。

标签: django lets-encrypt


【解决方案1】:

我不知道其他人使用什么设置,但我通常使用 Nginx 提供静态内容和 Gunicorn 作为应用程序服务器来设置 Django 应用程序。人们普遍认为 Django 应用程序通常使用这种两个 Web 服务器设置。使用 Nginx 设置 Let's Encrypt 的标准说明对我来说效果很好。

或者 Digital Ocean 也有一个很棒的guide

编辑:看起来 Nginx 可以进行“优雅”重新加载,无需停机即可更新配置。对于 Debian 或 Ubuntu pre Systemd,这将是 sudo service nginx reload,而对于带有 Systemd 的发行版,命令是 sudo systemctl reload nginx.service

【讨论】:

  • 我使用 nginx 和 gunicorn。我知道该指南并使用过一次。但是使用独立选项,需要我停止正在运行的应用程序。我稍微编辑了我的问题。希望现在能更好地理解。
  • 我使用了指南中描述的 webroot 插件。对我来说很好。
  • 但是我将不得不停止我正在运行的网络服务器。我想减轻这种情况。
  • 除非你有多个服务器和负载均衡,或者在 Nginx 前面已经有类似 Varnish 的东西,否则重启 Nginx 是不可避免的。对于大多数网络应用来说,由于重启 Nginx 而导致的一两秒停机时间并不是什么大问题。
  • 使用 webroot 插件所需要做的就是添加到 Nginx 的路由以提供该文件。为此,您必须重新启动 Nginx。如果你在 Nginx 前面有负载平衡或类似 Varnish 的东西,那么在你重新启动 Nginx 时它可以继续服务。否则运气不好。
【解决方案2】:

如果其他用户像我在 Google 上一样使用这种方式,以下是我改善这种情况的方法:

在运行Django 应用程序时为 Let's Encrypt 创建ACME 挑战时,我对自己的选择不满意。 So, I rolled my own solution and created a Django app! 基本上,您可以将ACME 挑战作为另一个对象来管理,并且应用程序将生成正确的端点 URL。

是的,您正在安装一个应用程序,这意味着对您的应用程序进行部署/更新,但是一旦您完成了,从长远来看管理您的挑战会容易得多。

只需 pip install django-letsencrypt 并跟随 README 即可上路。

【讨论】:

  • 您好,我尝试了您的项目,但出现的问题很少。如何设置“ACME 请求”和响应?有没有演示或示例?请求似乎不应该是静态对象,对吧?
  • 嗨@TonyWang!请查看示例项目,如果您真的认为您发现了错误,请使用GitHub问题。但是这个简单的应用程序和 README 应该能让你走得更远。示例项目:github.com/urda/django-letsencrypt/tree/v2.0.0/example_project
猜你喜欢
  • 2017-08-03
  • 1970-01-01
  • 2017-05-03
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
相关资源
最近更新 更多