在Elastic Beanstalk单Docker实例配置SSL失败求助
我之前配置Elastic Beanstalk单容器Docker SSL的时候也踩过类似的坑,结合官方文档的逻辑和实际排查经验,给你梳理几个能快速定位问题的方向:
排查与解决步骤
1. 先确认配置文件的存放位置是否正确
Elastic Beanstalk对.ebextensions文件夹的要求很严格:必须放在项目根目录,而且文件夹名称是全小写的。很多人会不小心写成.EBextensions或者把配置文件直接丢在根目录,导致EB完全忽略这些配置。
- 正确的项目结构应该是这样:
你的项目根目录/ ├── .ebextensions/ │ └── 01_envar.config ├── Dockerfile └── 其他项目文件(比如源码、依赖包等)
2. 检查01_envar.config的YAML语法是否合规
从你提供的片段看内容被截断了,AWS的配置文件是严格的YAML格式,任何缩进错误、冒号后缺空格、键名写错都会导致配置不生效。
- 完整的SSL相关配置大概是这个样子(根据你的实际情况调整):
option_settings: # 配置SSL证书ARN aws:elasticbeanstalk:application:environment: SSL_CERTIFICATE_ARN: "arn:aws:acm:你的区域:你的账号ID:certificate/证书ID" # 配置容器端口和代理 aws:elasticbeanstalk:container:docker: ContainerPort: 80 # 如果你的容器监听443就写443 aws:elasticbeanstalk:environment:proxy: ProxyServer: nginx SSLPort: 443 - 你可以用本地的
yamllint工具检查配置文件,确保没有语法错误。
3. 查看部署日志,直接找报错原因
不要只盯着实例状态,EB的日志会直接告诉你配置为什么没生效:
- 本地执行
eb logs拉取最新的部署日志,重点看这两个文件:/var/log/cfn-init.log:记录CloudFormation初始化配置的过程,如果配置文件加载失败、权限不够,这里会有明确的报错。/var/log/eb-engine.log:EB引擎的执行日志,能看到配置是否被正确识别。
- 如果已经SSH到实例,直接用命令过滤错误:
sudo cat /var/log/cfn-init.log | grep -i error
4. 确认实例的IAM角色权限足够
EB实例的服务角色需要有访问ACM证书、修改实例配置的权限,否则就算配置写对了也执行不了:
- 检查实例的IAM角色(通常是
aws-elasticbeanstalk-ec2-role)是否包含AWSElasticBeanstalkWebTier托管策略,或者自定义策略里有这些权限:acm:DescribeCertificateec2:ModifyInstanceAttributeelasticloadbalancing:ModifyListener(如果用到了负载均衡)
5. 单容器Docker的特殊注意点
单容器环境下EB会自动配置Nginx反向代理,这里容易踩坑:
- 如果你的容器监听的是80端口,一定要在配置里把EB的443端口转发到容器的80端口(就是上面配置里的
ContainerPort: 80)。 - 另外,ACM证书是区域级的,要确保你用的证书和EB环境在同一个AWS区域,不然会找不到证书。
6. 尝试清空环境缓存重新部署
有时候旧环境的缓存会导致配置不生效,可以试试:
- 执行
eb deploy --staged,确保本地所有修改都被正确打包上传。 - 如果还是不行,干脆先
eb terminate终止当前环境,再用eb create重新创建环境并部署,彻底清除缓存。
内容的提问来源于stack exchange,提问作者Anl Bozkurt
相关产品推荐
相关产品推荐

