Каналы Django через сервер Apache

У меня есть проект Django, который хорошо работает на моем VPS через apache. после добавления каналов Django в мой проект он отлично работает на локальном хосте, но в моем vps мой браузер зарегистрировал ошибку «Ошибка подключения WebSocket к«…»: ошибка во время рукопожатия WebSocket: Неожиданный код ответа: 404», и проект не удался.

согласно моему поиску в Google, я думаю, что apache не может поддерживать веб-сокет. но не могу найти четкого ответа и отключить запуск каналов на apache

это моя конфигурация апача в 000-default.conf:

<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()

person mohammad shobeiri    schedule 15.06.2017    source источник
comment
Я предполагаю, что вам нужно добавить свое доменное имя/IP-адрес в CHANNEL_LAYERS -> CONFIG -> hosts.   -  person Tamar    schedule 15.06.2017
comment
я пытаюсь это, но не решил мою проблему   -  person mohammad shobeiri    schedule 15.06.2017


Ответы (1)


Вам необходимо проверить раздел развертывания каналов. Обратите внимание на небольшие различия между каналами v1.x и v.2x. Подберите подходящий.

Как вы заметили, Apache не поддерживает веб-сокет. Таким образом, вам нужно будет запустить сервер, который предоставляет веб-сокет - a native ASGI interface server (терминология, используемая в документации канала). Вы можете использовать Дафну Джанго. Daphne также поддерживает HTTP-интерфейс.

Итак, у вас есть два решения:

  1. Пусть Apache доставляет ваш HTTP-запрос Django + Daphne доставляет ваш веб-сокет (если вы выберете это решение, ключевые слова, которые можно использовать для поиска дополнительной документации, — reverse proxy и ProxyPass)
  2. Использование Daphne для доставки вашего Websocket и HTTP (без необходимости в Apache).
person OlivierM    schedule 12.05.2019