gpt4 book ai didi

amazon-web-services - 如何在 AWS Cloudfront 上启用 websocket

转载 作者:行者123 更新时间:2023-12-04 13:26:07 34 4
gpt4 key购买 nike

我有一个在 AWS EC2 Autoscale 集群上运行的 Akka HTTP 服务器。这个 EC2 自动缩放集群前面有一个 ELB 应用程序负载均衡器。除了 ELB,我们还有一个云前端分布,它设置为提供静态文件。

我们面临一个问题,即从浏览器到后端的所有 websocket 连接请求都失败并显示 HTTP 400 Expected UpgradeToWebsocket header。错误。

经过进一步调查,我们发现客户端能够直接连接到负载均衡器,但通过云端的任何连接请求都会失败。最终我遇到了this page在 AWS Cloudfront 文档中,该文档说 Cloudfront 删除了任何“升级” header ,这可能是客户端无法连接的原因。

为了解决这个问题,我启用了所有“ header 转发”选项(禁用缓存),但它仍然不起作用。此外,我找不到任何选项来选择性地禁用云端缓存或完全绕过某些 URL 的云端。

如何解决此问题并确保 websockets 通过 cloudfront 工作?或者这只是不支持?

最佳答案

CloudFront 不是 Web 套接字的正确解决方案,因为它针对静态网页的缓存进行了优化,而 Web 套接字大多是动态的。另一方面,ELB 确实支持 HTTP Web 套接字 (ws://) 和安全 Web 套接字 (wss://),并且可以将其配置为处理所有 SSL 握手。但是,您需要使用 TCP 设置对其进行配置,以便在服务器传输时保持 HTTP/HTTPS 连接打开。这是如何完成的:

  • 单击 EC2 负载均衡器选项卡中的“创建负载均衡器”
  • 选择“经典负载均衡器”。你需要它来做一个简单的 TCP
  • 定义源和目标协议(protocol)(为普通 Web 套接字选择 TCP):

  • enter image description here
    4. 如果你在做安全的网络套接字,你需要选择一个证书,像这样:

    enter image description here
    5. 配置健康检查,添加实例并点击“创建”。定义 CNAME,一切就绪。

    请注意,如果您选择“HTTP”或“HTTPS”作为源协议(protocol),负载均衡器将在某些时候抛出 408 错误代码(超时),因为它并非旨在让连接保持打开太久。这就是我们选择 TCP 的原因。

    关于amazon-web-services - 如何在 AWS Cloudfront 上启用 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41330611/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com