You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置.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头。

第三步:部署验证

把配置文件放到项目里,部署到EB之后,做这两件事验证:

  1. 去EB控制台的负载均衡器页面,检查443监听的转发规则是不是“HTTP → 443端口”;
  2. 用HTTPS访问你的域名,看应用能不能正常响应,并且在日志里确认X-Forwarded-Proto头的值是https。

额外注意点

  • 如果你的应用之前是监听80端口,得修改应用配置,让它监听443端口的HTTP请求(注意是HTTP,不是HTTPS,因为加密已经在负载均衡器那边处理完了);
  • 确认你的ACM证书覆盖了Route 53配置的域名,不然负载均衡器的443监听会出问题。

内容的提问来源于stack exchange,提问作者tim_xyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:37:27