如何使用Apache和Daphne部署Django Channels?

4
我将尝试部署使用Channels的Django应用程序。 我使用Apache处理常规HTTP请求,并希望将Web套接字请求转发到Daphne。
以下是我的一些重要文件:
Apache配置:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC,OR]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://127.0.0.1:8001%{REQUEST_URI} [P,QSA,L]

Alias /static /home/anna/tchan/static
<Directory /home/anna/tchan/static>
Require all granted
</Directory>

Alias /media /home/anna/tchan/media
<Directory /home/anna/tchan/media>
Require all granted
</Directory>

<Directory /home/anna/tchan/tchan>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIScriptAlias / /home/anna/tchan/tchan/wsgi.py
WSGIDaemonProcess django_app python-path=/home/anna/tchan python-home=/home/anna/tchan/venv
WSGIProcessGroup django_app

</VirtualHost>
settings.py的最后几行代码如下:
ASGI_APPLICATION = 'tchan.routing.application'

CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('127.0.0.1', 8001)],
},
},
}

asgi.py

import os
import django
from channels.routing import get_default_application

from django.core.asgi import get_asgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tchan.settings')
django.setup()
application = get_default_application()

在这些准备就绪之后,我运行 daphne -p 8001 tchan.asgi:application 然后 sudo service apache2 reload。最后,在我的页面中测试websocket时会出现以下情况:

websocket.js:4 WebSocket连接到“ws://192.168.0.57/ws/chat/8/”失败:WebSocket握手期间出错:意外的响应代码:403

无论是否运行daphne,都会发生这个403错误。
我在这里做错了什么? 注意:当使用Django的开发服务器和Docker通道层时,应用程序按预期工作,问题似乎出在我的Apache配置上。

我也在做同样的事情,但是找不到好的线索来部署它,你能给我一些教程或参考资料来部署我的异步网站吗? - Syed Bilal Ali
1个回答

3

我明白了。为了使apache能够重定向,我们需要:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel

其中一个未启用,导致了403 Forbidden错误。


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