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

部署在AWS EC2的Flask应用配置SSL后异常求助

解决方案

一、Flask 核心配置修正

  • 设置 SERVER_NAME:明确告知Flask你的正式域名,避免生成EC2实例地址的链接
    app.config['SERVER_NAME'] = 'your-domain.com'
    
  • 强制HTTPS协议:确保Flask生成的所有链接都使用HTTPS
    app.config['PREFERRED_URL_SCHEME'] = 'https'
    
  • 检查登录重定向逻辑:所有重定向必须使用url_for生成,禁止硬编码EC2公网DNS地址,例如:
    # 正确写法
    return redirect(url_for('dashboard'))
    # 错误写法(禁止使用)
    # return redirect('http://ec2-xxx.compute.amazonaws.com/dashboard')
    

二、Nginx 反向代理配置调整

Nginx必须正确传递请求的主机头和协议信息,否则Flask无法识别用户的真实访问域名。示例配置如下:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;  # Flask应用运行的本地地址
        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;  # 传递请求使用的协议(HTTP/HTTPS)
    }
}

配置完成后重启Nginx生效:

sudo systemctl restart nginx

三、CloudFront 转发设置检查

由于使用CloudFront作为CDN,需确保它正确转发关键请求头到EC2实例:

  • 进入CloudFront分发的行为设置,编辑对应路径行为:
    • 勾选转发所有请求头,或至少单独转发Host、X-Forwarded-Proto头;
    • 动态内容建议选择缓存策略:CachingDisabled,避免缓存登录、导航等动态页面。
  • 检查CloudFront的源设置:源域名需填写EC2实例的公网DNS或弹性IP对应的域名,无需添加端口(Nginx在80端口监听)。

四、导航栏消失问题排查

导航栏消失通常是静态资源加载失败导致,需检查:

  • 静态资源链接是否使用url_for生成,例如:
    <link rel="stylesheet" href="{{ url_for('static', filename='css/navbar.css') }}">
    
  • 若静态资源托管在S3+CloudFront,需确保资源URL为HTTPS协议的正式域名地址,而非EC2实例地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 16:07:14