我正在尝试让一个由django channels提供支持的聊天应用程序在AWS Elastic Beanstalk上使用负载均衡器。
我基本上是修改https://github.com/jacobian/channels-example的代码来使用Elastic Beanstalk。我可以使用以下命令在本地成功运行它:
python manage.py runserver
问题是,当我使用Elastic Beanstalk部署它时,在启动聊天应用程序时会出现以下错误
WebSocket connection to 'wss://mydomain.com/test/' failed: Error
during WebSocket handshake: Unexpected response code: 200
我尝试了https://stackoverflow.com/a/29831723/3667089提出的解决方案,但它只是显示了不同的错误代码
WebSocket connection to 'wss://mydomain.com/test/websocket' failed:
Error during WebSocket handshake: Unexpected response code: 404
我也已经将负载平衡器侦听器端口更改为TCP 80,并获得SSL证书将安全侦听器端口更改为SSL 443,但仍然得到相同的错误。
我也读过Websockets with socket.io on AWS Elastic Beanstalk,但没有为Django配置代理服务器的选项,我认为它默认使用Apache。
Elastic Beanstalk的配置中我缺少了什么才能让它工作?
有什么办法可以改变这一点,使我们可以运行daphne服务器与asgi?
2条答案
按热度按时间czfnxgou1#
我没有使用Elastic Beanstalk,但这里是我的VPS配置。Ubuntu 14.04,带Nginx和Supervisor。Supervisor的工作是确保服务器和辅助进程始终运行。Nginx监听localhost上的8000端口,并将其转发到8080和443。
下面是我的Supervisor配置。我只需重新启动supervisor
sudo service supervisor restart
即可启动服务器erhoui1w2#
我认为你的问题可能只与负载均衡器有关,你必须创建新证书并将其应用于负载均衡器,以便它们允许ec2机器示例和Web Socket URL之间的通信。
&
解决这个问题的另一种方法是,你可以像这样使用你的EC2服务器IP地址:“ws:129.12.11.54“但这不是一种有效的方式来与django通道的websockets通信,这种方式可能会损害您的隐私,并且使用这种方式您无法获得安全的web sockets连接,您将获得“ws://“而不是“wss://“
我也遇到了同样的问题,如果你有有效的解决办法,请转告我。