You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在AWS ECS上的FastAPI WebSocket无法连接,该如何解决?

解决AWS ECS Fargate部署FastAPI WebSocket连接失败问题

一、负载均衡器(ALB)核心配置

  • 协议与头透传:WebSocket依赖HTTP握手完成协议升级,ALB默认支持该逻辑,但需确认80端口监听的目标组协议为HTTP,且无自定义规则拦截Upgrade: websocket和Connection: Upgrade这两个关键请求头。
  • 健康检查与超时:目标组健康检查别用WebSocket路径,改用普通HTTP接口(比如/health),避免健康检查失败导致容器被标记为不健康。另外ALB默认空闲超时为60秒,WebSocket是长连接,建议将该值调至300秒以上,防止连接被ALB主动断开。

二、安全组设置

  • ALB安全组:放开80端口的入站流量(生产环境建议限制客户端IP范围),因为WebSocket初始握手走HTTP协议,无需额外开放其他端口。
  • ECS任务安全组:允许来自ALB安全组的80端口入站流量,确保ALB能将请求转发至容器。容器出站流量默认允许,若有严格网络限制,需保证容器能与ALB正常通信。

三、任务定义与容器配置

  • 端口映射:确认任务定义的容器端口映射正确——FastAPI在容器内监听80端口,Fargate模式下主机端口可设为0(由AWS自动分配),但目标组需指向容器的80端口;也可直接将主机端口设为80,保持端口一致。
  • 启动命令:FastAPI启动必须绑定0.0.0.0,比如执行uvicorn main:app --host 0.0.0.0 --port 80,若绑定127.0.0.1,容器内部将无法接收来自ALB的请求。

四、VPC网络排查

  • 子网配置:ECS任务所在子网需为公有子网,或私有子网已配置NAT网关,确保ALB能访问到任务实例。ALB必须部署在公有子网,私有子网需配置指向NAT网关的路由规则。
  • DNS解析:用nslookup <ALB域名>检查域名是否能正常解析到ALB的IP地址,解析错误会直接导致连接失败。

五、测试与排障步骤

  • 先验证HTTP握手:执行curl -i -H "Upgrade: websocket" -H "Connection: Upgrade" <ALB域名>/ws(替换为你的WebSocket路径),若返回101 Switching Protocols,说明ALB与FastAPI的握手逻辑正常,问题大概率出在客户端;若返回404,要么路径错误,要么FastAPI的WebSocket路由配置有误。
  • 查看任务日志:登录AWS ECS控制台查看任务的日志输出,确认WebSocket请求是否到达容器,是否存在端口未监听、路由不存在等报错信息。
  • 检查wscat命令:确保使用ws://<ALB域名>/ws格式(而非http://),且路径与FastAPI中定义的WebSocket路由完全一致。

内容的提问来源于stack exchange,提问作者bsaoptima

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:00:10