Устранение неполадок Websockets с EC2 на AWS с использованием Django
Я использую Django-Channels, чтобы попытаться получить функции реального времени, такие как чат/обмен сообщениями, уведомления и т.д. Сейчас я получил все, чтобы нормально работать на моем ноутбуке, используя настройки, описанные в документах: http://channels.readthedocs.io/en/latest/. Я использую локальный сервер redis для тестирования.
Однако, когда я развертываю свой сервер Amazon EC2 Elastic Beanstalk (используя AWS ElastiCache Redis), функциональность WebSocket терпит неудачу. Я читал, и я думаю, что это связано с тем, что Amazon HTTPS не поддерживает WebSockets, поэтому мне нужно переключиться на Secure TCP.
Я попытался сделать это с помощью:
https://blog.jverkamp.com/2015/07/20/configuring-websockets-behind-an-aws-elb/
а также
https://medium.com/@Philmod/load-balancing-websockets-on-ec2-1da94584a5e9#.ak2jh5h0q
но безрезультатно.
Есть ли у кого-нибудь успех в реализации WebSockets с CentOS/Apache и Django на AWS EB? Пакет Django-Channels довольно новый, поэтому я был удивлен, если кто-то испытал и/или преодолел это препятствие.
Спасибо заранее
Ответы
Ответ 1
AWS запустила новый Балансировщик нагрузки приложений, который поддерживает сетевые сокеты. Измените свой ELB на Балансировщик нагрузки приложения, и это устранит вашу проблему.
https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/
Ответ 2
Как описано здесь, можно запустить Django Channels на Elastic Beanstalk с помощью балансировки нагрузки приложения.
В упрощенной форме это в основном:
- Создайте ALB
- Добавьте 2 целевые группы, которые указывают на порт 80, и один, который указывает на порт Дафни, то есть 8080.
- Создайте 2 правила пути. Пусть маршрут по умолчанию указывает на целевую группу 1 (порт 80), а второй - на относительный путь, т.е. /ws/ и укажите его на целевую группу 2.
- Добавьте Дафни и рабочих в супервизор (или другую систему инициализации)
- СДЕЛАНО! Доступ к Daphne/websockets через относительный url ws://example.com/ws/.
Ответ 3
Я полагаю, что это поздно, но я нашел эту статью http://blog.mangoforbreakfast.com/2017/02/13/django-channels-on-aws-elastic-beanstalk-using-an-alb/
Ответ 4
Я полагаю, что ALB - единственный способ. Причина в том, что с помощью списка протоколов SSL-протокола в классическом LB лиги на сессию и заголовки X-Forwaded не будут перенаправлены и приведут к циклу перенаправления прокси-сервера. Док здесь,
http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html
Я обновлю ответ, если узнаю способ с существующей CLB.