Flask socket.io, приложение gunicorn chat, застряло в цикле перенаправления - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть базовое приложение чата socket.io, созданное так же, как в этом примере. https://github.com/miguelgrinberg/Flask-SocketIO-Chat

Я могу запустить приложение с помощью gunicorn mychat:app --worker-class eventlet -w 1 --bind 0.0.0.0:5000 --reload, а затем autossh -M 0 -R myappname:80:localhost:5000 serveo.net и нажать соответствующий serveo.net.url.

Я пытаюсь развернуть это на экземпляре AWS EC2 за балансировщиком нагрузки с HTTPS.На экземпляре EC2 я установил nginx как здесь: https://flask -socketio.readthedocs.io / en / latest / # using-nginx-as-a-websocket-reverse-proxy (единственный пример, непример нескольких узлов).

Когда я захожу на URL, который я определил в целевой группе loadbalancer, и захожу в чат, я вижу, что на вкладке "Сеть" моего браузера есть множество запросов на быстрый опроскоторые дают 200, а затем 301. Если я присоединюсь к чату на другой вкладке, пользователи не смогут отправлять друг другу сообщения.

Что не так с моей конфигурацией?

1 Ответ

0 голосов
/ 21 февраля 2019

Покопавшись, я разобрался.Мой хост, example.com, указывает на балансировщик нагрузки с кучей правил прослушивания.Я сделал так, чтобы, если path = / mychatapp / *, то переслать экземпляр ec2, на котором запущено приложение.Это нормально, но socket.io делал вызовы с host = example.com, поэтому он нажимал example.com/socket.io/etcetcetc ... Я добавил другое правило прослушивателя балансировки нагрузки, если путь = / socket.io / *,затем также отправьте его в экземпляр ec2.Это работает.

Это решение довольно хакерское, так как оно означает, что я не смог запустить второе приложение socket.io.Лучшим ответом было бы как-то изменить вызов по умолчанию с "/socket.io" на "/mychatapp/socket.io", чтобы мне не требовалось другое правило прослушивателя.Я попробовал несколько способов сделать это, но это не сработало.Поскольку это небольшой проект, я буду придерживаться этого решения.

...