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

AWS ECS Fargate部署Rails应用公网访问失败求助

ECS Fargate + Rails 公网访问超时排查指南

1. 任务网络配置验证

  • 公网IP分配:确认ECS任务是否启用Assign public IP选项。Fargate任务在公共子网中必须开启该选项才能获取可被公网访问的IP,否则仅能通过NAT网关访问外网,自身无法接收公网请求。
  • 子网路由表:检查任务所在公共子网的路由表,确保存在指向0.0.0.0/0的路由,目标为Internet Gateway(IGW)。无此路由的话,任务的公网IP仅为占位符,实际无法连通外网。

2. 安全组规则检查

  • 入站规则:ECS任务的安全组必须允许0.0.0.0/0(或指定IP段)通过TCP协议访问3000端口。仅开放内部IP范围会导致公网请求被拦截。
  • 出站规则:确保规则允许任务访问RDS的3306端口(TCP),以及Rails依赖的外部资源(如rubygems、DNS解析)。默认全出站规则通常无需调整,自定义规则需逐一验证。
  • RDS安全组:确认其允许ECS任务所在安全组或任务私网IP访问3306端口(虽然你提到数据库初始化完成,但仍需排除偶发配置问题)。

3. 容器端口与服务绑定配置

  • 任务定义端口映射:检查ECS任务定义的portMappings,确保容器端口设为3000,协议为TCP(Fargate中主机端口可留空或与容器端口一致)。
  • Rails服务绑定地址:确认Rails启动命令绑定到0.0.0.0而非localhost。若仅绑定localhost,容器内部可访问,但外部网络无法连接。启动命令示例:rails server -b 0.0.0.0 -p 3000,或在config/puma.rb中设置bind 'tcp://0.0.0.0:3000'。

4. 任务运行状态验证

  • CloudWatch日志细节:查看Rails启动日志,确认存在Listening on tcp://0.0.0.0:3000类提示,证明服务监听地址正确。若日志显示绑定到localhost,则为核心问题。
  • 容器内部连通性:通过AWS Systems Manager Session Manager(需任务配置SSM权限)进入容器,执行curl localhost:3000验证服务是否正常响应;再执行curl [任务私网IP]:3000,排查是容器内部服务问题还是网络转发问题。

5. 公网访问测试

  • 排除本地网络干扰:切换至手机热点等不同网络访问[公网IP]:3000,避免本地防火墙、代理的影响。
  • 端口连通性测试:本地执行telnet [公网IP] 3000或nc -zv [公网IP] 3000:
    • 提示连接超时:网络层面(路由、安全组)存在阻断
    • 提示连接被拒绝:容器端口未正确监听或安全组入站规则未开放

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:50:07