AWS应用负载均衡(ALB)无法访问Docker容器问题求助
React应用通过ALB无法访问的原因及解决办法
ALB健康检查失败
ALB基于HTTP协议做健康检查,若目标EC2的80端口返回非200状态码,ALB会判定实例不健康,拒绝转发流量。- 排查:查看ALB目标组的健康状态,确认是否显示“不健康”
- 解决:
- 确保React应用根路径
/能返回200状态码(比如用create-react-app构建后,需用Nginx或serve -s build正确托管静态文件,避免404) - 调整健康检查路径到存在的资源,比如
/favicon.ico,或在应用中添加专门的/health接口返回200
- 确保React应用根路径
React路由配置与ALB转发不兼容
若使用BrowserRouter,ALB转发的请求可能因Host头或路由路径问题,导致React无法正确解析路由,返回404。- 解决:
- 构建React应用时设置
PUBLIC_URL环境变量,匹配ALB的域名,例如PUBLIC_URL=http://your-alb-domain - 配置静态资源服务(如Nginx)添加
try_files $uri $uri/ /index.html;规则,让所有路由请求回退到index.html
- 构建React应用时设置
- 解决:
EC2安全组/网络ACL限制
虽然NLB(TCP层)能通,但ALB的HTTP流量可能被EC2安全组或网络ACL拦截。需确保:- EC2安全组入站规则允许ALB所在VPC的CIDR段访问80端口
- 网络ACL的入站/出站规则允许HTTP(80端口)流量在ALB与EC2之间通行
容器内服务监听范围限制
若React开发服务器(npm start)默认仅监听localhost,即使Docker映射了端口,EC2主机也无法正常转发请求到容器。- 解决:启动开发服务器时添加
HOST=0.0.0.0环境变量,或使用生产构建后的静态服务(如serve -s build,默认监听0.0.0.0)
- 解决:启动开发服务器时添加
内容的提问来源于stack exchange,提问作者FabriManga
相关产品推荐
相关产品推荐

