Django通过apache服务器

时间:2017-06-15 13:46:04

标签: django apache django-channels

我有一个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()

1 个答案:

答案 0 :(得分:0)

您需要检查channels' Deploying section。请注意,频道v1.xv.2x文档之间的细微差别。拿起合适的一个。

您注意到,Apache不支持websocket。因此,您将需要运行公开websocket的服务器-a native ASGI interface server(渠道文档使用的术语)。您可以使用Django's Daphne。达芙妮还支持HTTP接口。

因此,您有两种解决方案:

  1. 让Apache传递Django的HTTP请求+达芙妮传递Websocket(如果您使用此解决方案,则用于查找更多文档的关键字为reverse proxyProxyPass
  2. 使用Daphne交付Websocket和HTTP(无需Apache)。