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

如何将搭载私有负载均衡器的Elastic Beanstalk与CloudFront集成?

将私有负载均衡器的Elastic Beanstalk Flask应用集成CloudFront

前提条件

  • Elastic Beanstalk应用已部署在私有VPC内,负载均衡器为私有类型(仅VPC内部可访问)
  • 已具备CloudFull操作权限,若使用自定义域名,需提前准备好对应域名的SSL证书(需部署在us-east-1区域)

步骤1:配置VPC与安全组

  • 调整私有负载均衡器的安全组规则,允许CloudFront的IP段访问:
    • 通过AWS CLI执行aws cloudfront list-cloud-front-ips获取CloudFront官方IP范围
    • 在负载均衡器安全组中添加入站规则:允许HTTP/HTTPS流量来自上述IP段
  • 确保Elastic Beanstalk的EC2实例安全组已允许来自私有负载均衡器的流量(通常默认已配置)

步骤2:创建CloudFront分发

  1. 登录AWS控制台进入CloudFront服务,点击「创建分发」
  2. 源设置配置:
    • 源域名:选择私有负载均衡器的DNS名称(可在Elastic Beanstalk控制台「配置」>「负载均衡器」中找到)
    • 源访问控制:创建并启用Origin Access Control (OAC),确保仅CloudFront能访问私有源
    • 协议:优先选择「HTTPS only」,若负载均衡器仅支持HTTP则选「HTTP only」
  3. 默认缓存行为设置:
    • 查看器协议政策:选择「Redirect HTTP to HTTPS」(强制HTTPS访问)
    • 允许的HTTP方法:勾选GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE(适配Flask应用的动态请求)
    • 缓存策略:动态Flask应用选「CachingDisabled」避免缓存动态内容;有静态资源可自定义缓存规则
    • 原点请求策略:选择「AllViewer」,传递所有请求头到源站,确保Flask能获取用户真实IP等信息
  4. 常规设置:
    • 备用域名(CNAME):添加自定义域名(若使用)
    • SSL证书:选择提前准备的证书(自定义域名场景),否则用CloudFront默认证书
  5. 点击「创建分发」,等待10-15分钟完成部署

步骤3:调整Elastic Beanstalk应用配置

  • 修改Flask应用代码,支持CloudFront传递的请求头:
    from flask import Flask, request
    app = Flask(__name__)
    
    @app.before_request
    def before_request():
        # 获取用户真实IP
        if 'X-Forwarded-For' in request.headers:
            request.remote_addr = request.headers['X-Forwarded-For'].split(',')[0].strip()
        # 处理HTTPS协议转换
        if request.headers.get('X-Forwarded-Proto') == 'https':
            request.url = request.url.replace('http://', 'https://')
    
  • 若使用Elastic Beanstalk的Python平台,在.ebextensions目录创建01-nginx.config文件,修改Nginx配置传递请求头:
    files:
      "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
          proxy_set_header        Host            $host;
          proxy_set_header        X-Real-IP       $remote_addr;
          proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header        X-Forwarded-Proto $scheme;
    
    完成后重新部署应用到Elastic Beanstalk

步骤4:验证集成效果

  • 访问CloudFront默认域名(如d1234567890abc.cloudfront.net),确认Flask应用可正常访问
  • 若使用自定义域名,将域名解析到CloudFront分发域名(CNAME记录),DNS生效后测试访问
  • 测试应用动态功能(如表单提交、用户登录),确保请求正常传递到后端
  • 开启CloudFront访问日志,检查请求是否成功转发到私有负载均衡器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:50:28