如何配置Apache以在Django通道中运行ASGI?甚至需要Apache吗?

如何配置Apache以在Django通道中运行ASGI?甚至需要Apache吗?,django,websocket,django-channels,Django,Websocket,Django Channels,我构建了一个django项目,并使用ApacheWSGiCombo将其部署到生产环境中。为此,我添加了 apache2.conf如下所示: WSGIScriptAlias / /home/ubuntu/MyProject/MyProject/wsgi.py WSGIPythonPath /home/ubuntu/MyProject <Directory /home/ubuntu/MyProject/MyProject> <Files wsgi.py> Require a

我构建了一个django项目,并使用ApacheWSGiCombo将其部署到生产环境中。为此,我添加了 apache2.conf如下所示:

WSGIScriptAlias / /home/ubuntu/MyProject/MyProject/wsgi.py
WSGIPythonPath /home/ubuntu/MyProject

<Directory /home/ubuntu/MyProject/MyProject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIScriptAlias//home/ubuntu/MyProject/MyProject/wsgi.py
WSGIPythonPath/home/ubuntu/MyProject
要求所有授权
因此,这意味着并不是所有对我的网站的请求都首先转到Apache,后者允许WSGI发挥作用。因此,如果我关闭Apache,该网站将无法运行

我现在已经安装了Django频道。根据文档()中的“部署”部分,我有:

  • 已安装的Redis(在我的Django Project server上)
  • 运行工作服务器
  • 运行Daphne(接口服务器)
  • 我已经停止了Apache,网站拒绝连接

  • 目前Apache没有ASGI服务器实现。这意味着您可以继续使用Apache,但也需要Daphne。本质上,Apache将从主要web服务器转变为反向代理服务器

    这样做可能有一些价值:Python开发人员多年来一直在反向代理模式下运行nginx。然而,Daphne是一个功能非常强大的web服务器,构建在Twisted的web服务器之上,因此Apache当然不是必需的


    此时此刻,我建议只运行Daphne:让Daphne监听您的主端口,并完全禁用Apache。如果您发现Apache还有一些您想要的功能,那么您需要将Apache配置为反向代理:一篇建议的配置文章是。

    正如Lukasa所提到的,我停止了Apache服务器,它首先停止了我的django应用程序的发布。 然后我运行了以下命令:

    sudo daphne MyProject.asgi:channel_layer --port 80 --bind 0.0.0.0 -v2
    sudo python manage.py runworker -v2
    

    这两个命令开始从服务器外部向http发送应用程序请求。除了问题帖中提到的配置之外,不需要其他配置。

    这很有意义。我目前正试图弄清楚如何配置Daphne。任何与此相关的资源都是非常受欢迎的。正如我在启动时看到的,服务器上写着“在127.0.0.1:8000启动服务器,通道层MyProject.asgi:channel\u layer”。由于它在端口8000上侦听,我对服务器的http请求被拒绝。您可以更改调用daphne的方式。daphne使用一个-p命令行参数来控制它绑定到的端口。不过,您可能不想使用daphne服务静态资产,您不想让apache或nginx坐在前面吗?他们需要额外的配置来代理websocket流量吗?Daphne可以很好地服务于静态资产。这是一个扭曲的web服务器,完全适合这种情况。但是,如果您更愿意使用nginx或Apache,这完全可以:只需以普通的反向代理形式配置它们,就像在gunicorn或uwsgi应用程序前面运行它们一样。