如何配置.ebextensions实现EB负载均衡器HTTPS终止后转发请求至监听443的EC2
没问题,这其实是 Elastic Beanstalk 里挺常见的配置场景,我帮你梳理清楚步骤和具体的配置写法:
核心逻辑先明确
你的负载均衡器已经在443端口用ACM证书完成了HTTPS终止,接下来要做的就是让它把解密后的未加密HTTP请求转发到EC2实例的443端口(你要求的监听端口),同时还要确保EC2上的应用能正确识别原始请求是HTTPS的——毕竟负载均衡器会把这些关键信息放在X-Forwarded-*请求头里,应用得能读明白才行。
第一步:编写.ebextensions配置文件
在你的项目根目录创建.ebextensions文件夹(没有的话新建一个),然后新建一个配置文件,比如lb-https-forwarding.config,内容如下:
option_settings: # 配置负载均衡器443端口的转发规则:HTTPS终止后,转HTTP到EC2的443端口 aws:elbv2:listener:443: ListenerProtocol: HTTPS Protocol: HTTP Port: 443 # 如果你已经在EB控制台配置过ACM证书,下面这行可以省略,EB会自动继承 SSLCertificateArns: arn:aws:acm:us-east-1:123456789012:certificate/your-cert-arn # 确保EC2安全组允许负载均衡器的TCP 443流量(因为转发的是HTTP到443端口) aws:autoscaling:launchconfiguration: SecurityGroups: !GetAtt AWSEBSecurityGroup.GroupId # 要是你有自定义安全组,就改成:"sg-xxxxxx, !GetAtt AWSEBSecurityGroup.GroupId" # 告诉EB:你的应用监听的是443端口的HTTP请求(健康检查也会用这个端口) aws:elasticbeanstalk:environment:process:default: Port: "443" Protocol: HTTP # 可选但重要:让应用识别原始请求的HTTPS属性(避免重定向循环) # 下面是Nginx的配置示例,其他应用类型对应调整 files: "/etc/nginx/conf.d/https-forwarding.conf": mode: "000644" owner: root group: root content: | proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port;
第二步:关键配置说明
- 负载均衡器转发规则:这部分是核心,指定443端口用HTTPS终止加密,再把明文HTTP请求转发到EC2的443端口。证书ARN如果已经在EB控制台配置过,直接删掉那行就行,EB会自动用你之前设置的ACM证书。
- 安全组配置:确保EC2的安全组允许来自负载均衡器的TCP 443流量——你之前开了HTTPS的443流量,其实已经覆盖这个需求了,这里明确写出来更稳妥。
- 应用端口声明:告诉EB你的应用在443端口监听HTTP请求,这样EB的健康检查也会走这个端口,避免出现健康检查失败的问题。
- X-Forwarded-Proto头处理:这步千万别漏!负载均衡器终止HTTPS后,应用收到的是HTTP请求,但用户实际发的是HTTPS请求。如果你的应用有HTTP转HTTPS的重定向逻辑,就会陷入循环。不同应用的配置方式不一样:
- Apache:可以在
.ebextensions里添加配置修改httpd.conf,加上RequestHeader set X-Forwarded-Proto "https"; - Node.js(Express):在代码里加一行
app.set('trust proxy', true),让Express信任负载均衡器的IP,自动识别X-Forwarded-Proto头。
- Apache:可以在
第三步:部署验证
把配置文件放到项目里,部署到EB之后,做这两件事验证:
- 去EB控制台的负载均衡器页面,检查443监听的转发规则是不是“HTTP → 443端口”;
- 用HTTPS访问你的域名,看应用能不能正常响应,并且在日志里确认
X-Forwarded-Proto头的值是https。
额外注意点
- 如果你的应用之前是监听80端口,得修改应用配置,让它监听443端口的HTTP请求(注意是HTTP,不是HTTPS,因为加密已经在负载均衡器那边处理完了);
- 确认你的ACM证书覆盖了Route 53配置的域名,不然负载均衡器的443监听会出问题。
内容的提问来源于stack exchange,提问作者tim_xyz
相关产品推荐
相关产品推荐

