【问题标题】:Troubleshooting Websockets with EC2 on AWS using Django使用 Django 在 AWS 上使用 EC2 对 Websocket 进行故障排除
【发布时间】:2016-08-22 20:07:53
【问题描述】:

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

但是,当我部署到我的 Amazon EC2 Elastic Beanstalk 服务器(使用 AWS ElastiCache Redis)时,WebSocket 功能失败。我正在阅读,我认为这是由于亚马逊的 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 但无济于事。

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

【问题讨论】:

  • 我也在尝试使用 EBS。据我所知,默认的 Python 容器希望使用 WSGI(因此在 "aws:elasticbeanstalk:container:python" 中使用 WSGIPath: "appname/wsgi.py"),因此很难运行 Daphne。你有没有找到解决这个问题的方法?
  • 你发现了吗??
  • 你发现了吗?
  • 你在使用负载均衡器吗?

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    简而言之,基本上是:

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

    【讨论】:

    • 我试过这个@ege,但我仍然收到failed: Error during WebSocket handshake: Unexpected response code: 502
    【解决方案3】:

    我想 ALB 是唯一的方法。原因是因为使用经典 LB 中的 SSL 协议侦听器,会话粘性和 X-Forwaded 标头不会被转发,并会导致代理服务器重定向循环。医生来了,

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

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

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      • 1970-01-01
      • 2021-10-14
      • 2015-01-10
      • 2019-01-02
      • 2016-02-12
      相关资源
      最近更新 更多