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

部署在AWS的Node应用(ALB、ASG、私有子网EC2)持续返回504错误

问题诊断与修复方案

可能的配置问题

以下是导致ALB返回504网关超时的核心配置问题:

1. ALB安全组冗余配置引发冲突

你创建互联网型ALB时,同时绑定了自定义NodeApiPublicLBSG和默认VPC安全组。默认安全组的入站规则仅允许同组内流量,会干扰ALB接收外部请求;另外,NodeApiPublicLBSG的出站规则大概率未明确放行到私有子网EC2实例4000端口的流量。

2. EC2实例安全组未限定放行端口

NodeApiPrivateInstanceSG仅设置允许来自NodeApiPublicLBSG的流量,但未指定放行4000端口,导致ALB的流量无法抵达EC2上的应用进程。

3. 目标组健康检查路径不匹配

你仅设置了目标组端口为4000,但未将健康检查路径指定为应用的/health端点。若使用默认路径(如/),可能触发健康检查失败,ALB会拒绝向该实例转发流量,最终导致超时。

4. 网络ACL(NACL)流量限制

自定义VPC的NACL默认拒绝所有流量,可能存在以下限制:

  • 公有子网NACL未允许入站80/443端口(来自互联网)及出站4000端口(到私有子网CIDR)
  • 私有子网NACL未允许入站4000端口(来自公有子网CIDR)及出站临时端口(1024-65535)(用于向ALB返回响应)

修复步骤

按以下顺序调整配置,逐一验证:

1. 修正ALB安全组配置

  • 登录AWS控制台,进入「EC2 -> 负载均衡器」,找到目标ALB
  • 在「安全组」标签页,移除默认VPC安全组,仅保留NodeApiPublicLBSG
  • 编辑NodeApiPublicLBSG的出站规则:添加一条规则,允许TCP 4000端口,目标为私有子网CIDR(10.0.128.0/18 + 10.0.192.0/18)

2. 更新EC2实例安全组入站规则

  • 进入「EC2 -> 安全组」,找到NodeApiPrivateInstanceSG
  • 编辑入站规则:添加一条规则,允许TCP 4000端口,来源为NodeApiPublicLBSG的安全组ID

3. 调整目标组健康检查配置

  • 进入「EC2 -> 目标组」,找到目标组
  • 在「健康检查」标签页,将路径修改为/health,确认端口为4000、协议为HTTP后保存
  • 等待5-10分钟,查看「目标」标签页,确认所有EC2实例的健康状态为「健康」

4. 验证并修正网络ACL配置

  • 进入「VPC -> 网络ACL」,分别检查公有子网和私有子网的NACL:
    • 公有子网NACL:
      • 入站:允许TCP 80/443(来源0.0.0.0/0)、允许TCP 4000(来源私有子网CIDR)
      • 出站:允许TCP 4000(目标私有子网CIDR)、允许所有临时端口(1024-65535,目标0.0.0.0/0)
    • 私有子网NACL:
      • 入站:允许TCP 4000(来源公有子网CIDR)
      • 出站:允许所有临时端口(目标公有子网CIDR)、允许所有流量到NAT网关(确保实例能访问互联网)

5. 确认ASG与目标组关联状态

  • 进入「EC2 -> Auto Scaling Groups」,找到目标ASG,在「目标组」标签页确认关联正确
  • 检查ASG创建的实例是否已成功注册到目标组,且健康状态正常

内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 05:27:53