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

如何在EC2实例上以HTTPS运行Python Flask应用(无需修改代码)

在EC2上为Flask应用配置HTTPS(无需修改代码)

方法一:使用Nginx反向代理 + Let's Encrypt证书

这是最常用的方案,通过Nginx接收HTTPS请求,再转发给本地运行的Flask应用(保持HTTP)。

1. 安装Nginx

根据EC2实例的操作系统执行对应命令:

  • 对于Amazon Linux 2/CentOS:
    sudo yum install nginx -y
    sudo systemctl start nginx
    sudo systemctl enable nginx
    
  • 对于Ubuntu/Debian:
    sudo apt update
    sudo apt install nginx -y
    sudo systemctl start nginx
    sudo systemctl enable nginx
    

2. 配置Nginx反向代理

编辑Nginx的站点配置文件,比如/etc/nginx/conf.d/flask_app.conf:

server {
    listen 80;
    server_name your-domain.com; # 替换为你的域名

    # 把所有HTTP请求重定向到HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your-domain.com;

    # SSL证书路径(后续通过certbot自动生成)
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # 转发请求到本地Flask应用(假设Flask跑在5000端口)
    location / {
        proxy_pass http://127.0.0.1:5000;
        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;
    }
}

保存后测试配置是否合法:

sudo nginx -t

如果没有错误,重启Nginx:

sudo systemctl restart nginx

3. 获取免费SSL证书(Let's Encrypt)

安装Certbot工具来自动获取和续期证书:

  • 对于Amazon Linux 2/CentOS:
    sudo yum install certbot python3-certbot-nginx -y
    
  • 对于Ubuntu/Debian:
    sudo apt install certbot python3-certbot-nginx -y
    

执行证书申请命令,Certbot会自动配置Nginx:

sudo certbot --nginx -d your-domain.com

按照提示完成邮箱填写、同意条款等步骤即可。证书会自动续期,无需手动操作。

4. 配置EC2安全组

确保EC2实例的安全组开放**80(HTTP)和443(HTTPS)**端口,允许来自0.0.0.0/0的访问(或按需限制IP)。

方法二:使用AWS应用负载均衡器(ALB)

利用AWS的负载均衡器处理HTTPS终止,EC2上的Flask应用保持HTTP运行。

1. 创建并配置ALB

  • 登录AWS控制台,进入EC2服务,创建应用负载均衡器,选择互联网-facing类型。
  • 配置监听:添加HTTPS监听(端口443),选择一个已有的SSL证书(可在AWS Certificate Manager申请免费证书);同时添加HTTP监听(端口80)并设置重定向到HTTPS。
  • 将Flask应用所在的EC2实例添加到目标组,目标组的端口设置为Flask运行的端口(如5000),协议选择HTTP。

2. 配置安全组

  • ALB的安全组开放80和443端口。
  • EC2实例的安全组仅允许来自ALB安全组的流量访问Flask端口(如5000),增强安全性。

3. 更新域名解析

将你的域名解析到ALB的DNS地址。

两种方案都不需要修改Flask应用的代码,只需通过外部代理或负载均衡器实现HTTPS访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:55:12