Strapi 4部署AWS Elastic Beanstalk成功但无法访问URL求助
Strapi 4部署AWS Elastic Beanstalk无法访问的排查步骤
以下是针对你遇到的问题的关键排查点和解决方案:
1. 验证Docker端口映射配置
因为是Docker部署,负载均衡的80/443端口需要正确映射到容器内Strapi运行的1337端口:
- 确保Dockerfile中包含
EXPOSE 1337语句,声明容器暴露的端口。 - 检查
Dockerrun.aws.json(单容器部署用版本1,多容器用版本2)的端口映射配置,示例如下:
{ "AWSEBDockerrunVersion": "1", "Ports": [ { "ContainerPort": "1337", "HostPort": "80" } ] }
该配置将EC2主机的80端口与容器的1337端口绑定,让负载均衡的流量能进入容器。
2. 检查安全组规则
- 负载均衡安全组:必须允许互联网(0.0.0.0/0)的80(HTTP)和443(HTTPS)入站流量。
- EC2实例安全组:需要允许负载均衡安全组访问实例的绑定端口(比如上面配置的80端口),确保负载均衡能将流量转发到实例。
3. 补充Strapi的URL配置
Strapi 4需要明确配置外部访问URL,否则可能导致路由或CORS问题。修改你的server.ts,添加url参数:
import cronTasks from './functions/cron_tasks'; export default ({ env }) => ({ host: env('HOST', '0.0.0.0'), port: env.int('PORT', 1337), app: { keys: env.array('APP_KEYS'), url: env('APP_URL', 'http://lrd-api.ap-southeast-1.elasticbeanstalk.com'), // 新增此行 }, webhooks: { populateRelations: env.bool('WEBHOOKS_POPULATE_RELATIONS', false), }, cron: { enabled: true, tasks: cronTasks, }, });
同时在EB环境变量中设置APP_URL为你的EB域名,保持配置灵活性。
4. 调整EB健康检查配置
EB默认的健康检查路径为/,但Strapi根路径可能不返回200状态码,导致负载均衡判定实例不健康,拒绝转发流量。修改健康检查路径为Strapi内置的健康端点:
- 进入EB控制台,找到对应环境的「配置」→「负载均衡」→「健康检查」。
- 将路径改为
/health,该端点是Strapi 4默认提供的,会返回200状态码,确保负载均衡能正确识别实例状态。
5. 确认负载均衡监听规则
- 检查负载均衡的80端口监听规则,确认转发目标是EC2实例的80端口(对应之前的端口映射)。
- 如果使用HTTPS,需确保SSL证书已正确绑定到负载均衡的443监听,且转发规则指向实例的正确端口。
6. 本地连通性测试
- 直接使用EC2实例的公网IP访问绑定端口(比如
http://[实例IP]:80),如果能访问,说明问题出在负载均衡或域名解析;如果不能访问,需排查容器启动状态或端口映射是否生效。
内容的提问来源于stack exchange,提问作者Aloysius Wee
相关产品推荐
相关产品推荐

