我有一个Django项目,在我的VPS over apache上运行良好。 将Django频道添加到我的项目之后,它完全在localhost上运行,但是在我的vps中,我的浏览器记录了一个错误“WebSocket连接到'...'失败:WebSocket握手期间出错:意外响应代码:404”并且项目失败。 / p> 根据我的谷歌搜索,我认为apache不能支持web-socket。但无法找到明确的答案和在apache上运行频道的旅程
这是我在000-default.conf中的apache配置:
<VirtualHost *:80>
Alias /static /opt/kalameh/static
<Directory /opt/kalameh/static>
Require all granted
</Directory>
<Directory /opt/kalameh/server>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
WSGIDaemonProcess kalameh python-path=opt/kalameh python-home=opt/kalameh/kalamehenv
WSGIProcessGroup kalameh
WSGIScriptAlias / opt/kalameh/server/wsgi.py
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
这是我的wsgi.py
import os
import sys
sys.path.append('/opt/kalameh/')
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")
application = get_wsgi_application()
答案 0 :(得分:0)
您需要检查channels' Deploying section。请注意,频道v1.x和v.2x文档之间的细微差别。拿起合适的一个。
您注意到,Apache不支持websocket。因此,您将需要运行公开websocket的服务器-a native ASGI interface server
(渠道文档使用的术语)。您可以使用Django's Daphne。达芙妮还支持HTTP接口。
因此,您有两种解决方案:
reverse proxy
和ProxyPass
)