如何为Elastic Beanstalk默认URL配置SSL以启用HTTPS
如何让Elastic Beanstalk默认使用HTTPS并解决证书不匹配错误
一、先理清证书错误的核心原因
你遇到的NET::ERR_CERT_COMMON_NAME_INVALID错误,本质是证书与访问域名不匹配:你导入的是自有域名的SSL证书,但访问的却是Elastic Beanstalk提供的默认域名(比如http://exy-env.eba-b3k8jne90.ap-south-1.elasticbeanstalk.com)。亚马逊的默认域名无法使用第三方SSL证书,必须绑定你自己的自定义域名,并使用对应该域名的证书。
二、分步完成HTTPS配置
1. 绑定自定义域名到Elastic Beanstalk环境
- 登录AWS控制台,进入Elastic Beanstalk服务,打开你的Node.js环境
- 切换到「配置」标签页,找到「负载均衡器」配置项,点击「编辑」
- 在「域名」区域点击「添加域名」,输入你的自定义域名(比如
api.yourdomain.com),保存配置 - 前往你的域名服务商后台,添加一条CNAME记录,将自定义域名指向Elastic Beanstalk的默认域名
2. 申请并导入对应自定义域名的SSL证书
- 登录AWS控制台,进入Certificate Manager(ACM)服务
- 点击「请求证书」,选择「公有证书」,进入下一步
- 输入你的自定义域名(支持通配符,如
*.yourdomain.com),点击下一步 - 选择DNS验证方式(推荐),按照提示在域名服务商后台添加指定的DNS解析记录,等待AWS验证完成(通常几分钟到1小时)
- 验证通过后,证书会显示「已颁发」状态
3. 配置负载均衡器启用HTTPS
- 回到Elastic Beanstalk的「配置」标签页,再次编辑「负载均衡器」配置项
- 在「监听器」区域点击「添加监听器」:
- 协议选「HTTPS」,端口填「443」
- 从下拉列表中选中你在ACM中颁发的对应自定义域名的证书
- 目标协议选「HTTP」,目标端口填「80」(负载均衡器会自动解密HTTPS请求,转发到Node.js服务的HTTP端口)
- 保存配置,等待Elastic Beanstalk更新环境(约几分钟)
4. 强制HTTP自动跳转HTTPS
有两种实现方式,任选其一即可:
- 负载均衡器层面(推荐):回到「负载均衡器」配置的「监听器」,找到默认的HTTP(80端口)监听器,点击「编辑」,将「默认操作」改为「重定向到HTTPS」,端口填443,保存配置
- Node.js服务层面:在你的Node.js代码中添加中间件,通过负载均衡器转发的
x-forwarded-proto头判断请求协议,实现跳转:app.use((req, res, next) => { if (req.headers['x-forwarded-proto'] !== 'https') { return res.redirect(`https://${req.headers.host}${req.url}`); } next(); });
5. 验证配置
- 等待环境更新完成后,访问你的自定义域名(如
https://api.yourdomain.com),确认浏览器显示安全锁且服务正常响应 - 测试HTTP访问(如
http://api.yourdomain.com),确认自动跳转到HTTPS
常见问题排查
- 仍出现证书错误:检查证书绑定的域名与访问的自定义域名是否完全一致(比如证书是
api.yourdomain.com,就不能用www.yourdomain.com访问) - HTTPS无法访问:检查负载均衡器的安全组是否开放了443端口,确保入站规则允许TCP 443流量
- 跳转不生效:检查负载均衡器的HTTP监听器重定向配置,或Node.js中间件是否正确读取
x-forwarded-proto头
内容的提问来源于stack exchange,提问作者tanuj gupta
相关产品推荐
相关产品推荐

