【问题标题】:Django Channels over apache serverApache 服务器上的 Django 频道
【发布时间】:2017-11-18 01:09:08
【问题描述】:

我有一个 Django 项目,它在我的 VPS over apache 上运行良好。 将 Django 频道添加到我的项目后,它可以在 localhost 上完美运行,但在我的 vps 中,我的浏览器记录了一个错误“WebSocket connection to '...' failed: Error during WebSocket handshake: Unexpected response code: 404”并且项目失败了。

根据我的谷歌搜索,我认为 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()

【问题讨论】:

  • 我猜你必须将你的域名/IP地址添加到CHANNEL_LAYERS -> CONFIG -> hosts
  • 我试试这个但没有解决我的问题

标签: django apache django-channels


【解决方案1】:

您需要查看channels' Deploying section。请注意频道 v1.xv.2x 文档之间的细微差别。选择合适的。

如您所见,Apache 不支持 websocket。因此,您需要运行一个公开 websocket 的服务器 - a native ASGI interface server(频道文档使用的术语)。您可以使用Django's Daphne。 Daphne 也支持 HTTP 接口。

所以你有两个解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-05
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2013-09-21
    • 2017-09-03
    • 1970-01-01
    相关资源
    最近更新 更多