使用Django在AWS上使用EC2对Websockets进行故障排除

时间:2016-04-28 07:37:35

标签: python django amazon-web-services amazon-ec2 websocket

我正在使用Django-Channels来尝试获取实时功能,例如聊天/消息,通知等。现在,我已经使用此处文档中描述的设置在笔记本电脑上正常工作:{{ 3}}。我使用本地redis服务器进行测试。

但是,当我部署到我的Amazon EC2 Elastic Beanstalk服务器(使用AWS ElastiCache Redis)时,WebSocket功能失败。我正在阅读,我认为这是因为亚马逊的HTTPS不支持WebSockets,所以我需要切换到Secure TCP。 我试过这样做: http://channels.readthedocs.io/en/latest/https://blog.jverkamp.com/2015/07/20/configuring-websockets-behind-an-aws-elb/ 但无济于事。

有没有人在AWS EB上使用CentOS / Apache和Django成功实现WebSockets? Django-Channels包是相当新的,所以如果有人经历过和/或克服了这个障碍,我就赢了。 提前致谢

4 个答案:

答案 0 :(得分:2)

AWS推出了支持Web套接字的新Application Load Balancer。将您的ELB更改为应用程序负载均衡器,这将解决您的问题。

https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/

答案 1 :(得分:2)

正如here所述,可以使用应用程序负载均衡器在Elastic Beanstalk上运行Django通道。

简化形式,基本上是:

  1. 创建一个ALB
  2. 添加2个目标组,一个指向端口80,另一个指向Daphne端口,即8080。
  3. 创建2 路径规则。让默认路由指向目标组1(端口80),并将第二个路由指向使用相对路径,即。 / ws / 并将其指向目标群组2。
  4. 将Daphne和工人添加到supervisord(或其他初始系统)
  5. DONE!通过相对网址访问Daphne / websockets ws://example.com/ws/

答案 2 :(得分:1)

答案 3 :(得分:0)

我认为ALB是唯一的方法。原因是因为使用经典LB中的SSL协议列表器,会话粘性和X-Forwaded标头将不会被转发,并将导致代理服务器重定向循环。 Doc就在这里,

http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html

如果我找到现有CLB的方法,我会更新答案。

相关问题