AWS Elastic Beanstalk ALB 504网关超时问题求助
排查与解决思路
针对你的Elastic Beanstalk Docker环境部署Directus后出现的ALB健康检查超时、域名访问504问题,按以下步骤逐一排查:
验证目标组健康检查配置
- 确认目标组健康检查协议为
HTTP,端口设置为8055,路径严格匹配/server/ping(注意大小写)。 - 调整健康检查超时与间隔:若Directus启动较慢,将超时时间从默认5秒调至10秒,间隔设为20秒,给应用足够响应窗口。
- 确认目标组健康检查协议为
排查网络连通性
- 在EC2实例上执行
sudo tcpdump -i any port 8055,触发健康检查后观察是否有ALB来源的流量到达。若无流量,检查:- EC2安全组入站规则:确认已允许ALB所属安全组的8055端口HTTP流量,安全组ID需准确无误。
- VPC网络访问控制列表(NACL):需同时允许入站8055端口流量和出站临时端口(1024-65535)的响应流量。
- 测试VPC内网访问:用同VPC内的资源访问EC2实例内网IP:8055/server/ping,若失败则问题出在实例本身或内网路由。
- 在EC2实例上执行
确认Directus监听配置
- 检查Directus启动参数,确保监听地址为
0.0.0.0而非127.0.0.1。仅监听回环地址会导致ALB通过内网IP无法访问应用(公网能访问是因为你用了实例公网IP,本地请求走回环)。 - 在EC2本地执行
curl http://localhost:8055/server/ping,确认能返回pong,排除应用自身端点故障。
- 检查Directus启动参数,确保监听地址为
防止Elastic Beanstalk覆盖配置
- 登录EB控制台,进入环境「配置」>「负载均衡」,确认默认进程的端口为
8055、健康检查路径为/server/ping。EB会自动同步配置,若手动修改目标组后EB控制台配置不一致,会被覆盖。 - 创建
.ebextensions/loadbalancer.config文件固化配置,避免被EB自动重置:option_settings: aws:elasticbeanstalk:environment:process:default: Port: '8055' HealthCheckPath: '/server/ping'
- 登录EB控制台,进入环境「配置」>「负载均衡」,确认默认进程的端口为
分析ALB访问日志
开启ALB访问日志并存储到S3,查看日志中健康检查请求的详细状态,判断是ALB未收到请求、转发失败还是目标无响应,精准定位问题环节。
内容的提问来源于stack exchange,提问作者Niraj Kumar
相关产品推荐
相关产品推荐

