- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个在 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 连接打开。这是如何完成的:
关于amazon-web-services - 如何在 AWS Cloudfront 上启用 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41330611/
我是一名优秀的程序员,十分优秀!