AWS三层架构:安全组限制后端仅前端访问失效问题求助
AWS三层架构前后端通信故障排查与安全组配置方案
故障现象
- 架构部署:React前端(单EC2实例)、Node.js后端(单EC2实例)、MySQL数据库(单RDS实例),组成三层Web应用架构
- 当前安全组配置:
- 前端安全组:允许公网访问HTTP/HTTPS端口,出站规则为所有流量通向外网
- 后端安全组:仅允许前端安全组访问80端口,出站规则为所有流量通向外网
- RDS安全组:仅允许后端安全组访问3306端口,出站规则为所有流量通向外网
- 核心问题:前后端通信超时,无后端请求日志;AWS可达性分析器测试显示连通,但开放后端安全组所有IP访问80端口时通信恢复,且不能开放后端公网访问
排查步骤
- 验证前端请求地址:前端调用后端时,若使用后端公网IP发起请求,后端安全组中「允许前端安全组访问」的规则不会生效——公网请求的源IP是前端EC2的公网IP,而安全组规则匹配的是前端实例的内网IP段,这是最常见的触发原因。
- 检查后端监听地址:确认Node.js服务绑定的是
0.0.0.0而非127.0.0.1,仅绑定localhost会导致内网请求无法被服务接收。 - 核对安全组规则方向:后端安全组的入站规则必须是「允许前端安全组的所有IP访问80端口」,若规则方向搞反(比如前端安全组允许后端访问),会直接拦截流量。
- 确认VPC与子网配置:前端、后端EC2需处于同一个VPC;若跨VPC,需配置VPC对等连接,且安全组要同步开放跨VPC的流量权限。
- 排查NACL规则:检查VPC的网络访问控制列表(NACL),确认未拦截前端到后端80端口的入站/出站流量——安全组允许但NACL拒绝也会导致超时。
正确安全组配置方案
前端EC2安全组(Frontend-SG)
- 入站规则:
- 允许
0.0.0.0/0访问80(HTTP)、443(HTTPS)端口,满足公网用户访问前端需求
- 允许
- 出站规则:
- 允许
所有流量到0.0.0.0/0,确保前端能发起对后端及外部服务的请求
- 允许
后端EC2安全组(Backend-SG)
- 入站规则:
- 允许
Frontend-SG的所有IP访问80端口(或Node.js实际监听的自定义端口),仅开放前端内网访问权限 - 允许
自身安全组访问22端口(可选),方便通过前端EC2跳板登录后端进行运维
- 允许
- 出站规则:
- 允许
所有流量到0.0.0.0/0,保障后端能访问RDS及其他依赖服务
- 允许
RDS数据库安全组(RDS-SG)
- 入站规则:
- 允许
Backend-SG的所有IP访问3306端口(MySQL默认端口),仅开放后端访问数据库的权限
- 允许
- 出站规则:
- 允许
所有流量到0.0.0.0/0,满足RDS正常运维的出站流量需求
- 允许
额外验证建议
- 前端代码中将API请求地址改为后端EC2的内网私有IP,例如将
http://xxx.xxx.xxx.xxx/api替换为http://10.0.1.xx/api(根据实际VPC内网段调整) - 在前端EC2实例上执行
curl http://后端内网IP:80/api,测试内网连通性,快速区分是代码问题还是网络问题 - 检查后端Node.js的日志配置,确保请求日志正常输出(例如用
console.log或Winston库记录请求明细) - 确认后端EC2的本地防火墙(如iptables)未拦截80端口的内网请求
内容的提问来源于stack exchange,提问作者Ankit Jodhani
相关产品推荐
相关产品推荐

