如何配置Apache以在Django Channels中运行ASGI?Apache是否必需?

12

我构建了一个Django项目,并使用Apache-WSGI组合部署到生产环境中。为此,我添加了如下所示的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>

这意味着我网站的所有请求首先要经过Apache,然后才允许WSGI发挥作用。所以如果我关闭Apache,网站将无法工作。

现在我已经安装了Django-Channels。根据文档中的“部署”部分(https://channels.readthedocs.io/en/latest/deploying.html),我已经:

  1. 在我的Django项目服务器上安装了Redis
  2. 运行了工作服务器
  3. 运行了Daphne(接口服务器)
  4. 目前我停止了Apache,网站拒绝连接。
2个回答

16

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

这样做可能会产生一些价值:Python 开发人员多年来一直在反向代理模式下运行 nginx。但是,Daphne 是一个非常强大的 Web 服务器,它是建立在 Twisted 的 Web 服务器之上的,因此 Apache 并非必需品。

因此,我建议暂时只使用 Daphne:让 Daphne 监听您的主要端口并完全禁用 Apache。如果您发现仍然需要 Apache 的某些功能,则需要将 Apache 配置为反向代理:推荐一个配置说明文章:Digital Ocean 上的这篇文章


那很有道理。我目前正在尝试弄清楚如何配置Daphne。如果有任何相关资源,将不胜感激。因为当服务器启动时,它会显示“Starting server at 127.0.0.1:8000, channel layer MyProject.asgi:channel_layer”。由于它正在监听端口8000,所以我的HTTP请求被拒绝了。 - Utkarsh Sinha
1
你可以更改调用daphne的方式。daphne接受一个-p命令行参数,控制它绑定到哪个端口。 - Lukasa
你可能不想让Daphne服务静态资源,但是你仍然希望apache或nginx在前面运行,对吧?它们需要额外的配置来代理websocket流量吗? - Aaron McMillin
Daphne可以很好地提供静态资源服务。它是一个完全适合此用途的Twisted Web服务器。但是,如果您更喜欢使用nginx或Apache,那也完全没问题:只需以普通反向代理形式配置它们,就像在gunicorn或uwsgi应用程序前面运行它们时所做的那样。 - Lukasa

7
正如Lukasa所提到的,我停止了Apache服务器,这首先停止了我的django应用程序向世界传递。然后我运行了以下命令:
sudo daphne MyProject.asgi:channel_layer --port 80 --bind 0.0.0.0 -v2
sudo python manage.py runworker -v2

这两个命令开始将应用程序提供给来自服务器外部的HTTP请求。除了问题帖子中提到的配置之外,不需要任何其他配置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接