Flask应用部署EC2 Ubuntu后AWS Cognito认证重定向失败求助
Flask + AWS Cognito 部署EC2后认证跳转ERR_CONNECTION_REFUSED 排查指南
核心排查方向
1. 验证AWS Cognito回调URL配置
- 登录AWS控制台,进入Cognito用户池的应用客户端设置页面
- 确认**Callback URL(s)和Sign out URL(s)**已添加EC2实例的公网IP/域名(例如
http://your-ec2-public-ip/dashboard),本地localhost地址可保留但线上必须包含EC2公网地址 - 注意:Cognito严格校验回调地址,未配置的地址会被拦截,导致跳转失败
2. 检查Gunicorn运行状态与绑定地址
- 查看Gunicorn配置文件,确认绑定地址为
0.0.0.0:端口(如0.0.0.0:8000),而非127.0.0.1:端口——绑定本地回环地址会导致Nginx无法转发请求 - 执行
ps aux | grep gunicorn,确认Gunicorn进程正常运行 - 在EC2本地执行
curl http://127.0.0.1:8000/dashboard,测试Gunicorn是否能正常响应仪表板请求,排除应用本身故障
3. 校验Nginx反向代理配置
- 检查Nginx站点配置文件(通常在
/etc/nginx/sites-available/下),确保反向代理规则正确指向Gunicorn:
server { listen 80; server_name your-ec2-public-ip; location / { proxy_pass http://127.0.0.1:8000; 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 - 确认Nginx监听的端口(默认80)已在EC2安全组中开放,且Cognito回调URL使用该端口
4. 检查Flask应用配置
- 确保应用未硬编码回调/重定向地址为
localhost,改用环境变量或配置文件读取线上地址,例如:
import os BASE_URL = os.getenv('BASE_URL', 'http://localhost:5000') # 在Cognito认证配置中使用BASE_URL拼接回调地址
- 确认Gunicorn启动命令使用正确的应用入口(如
gunicorn --config gunicorn.conf.py wsgi:app),无启动异常
5. 日志分析定位问题
- 查看Gunicorn服务日志:
sudo journalctl -u project_name -f,排查应用启动报错、请求处理异常 - 查看Nginx日志:
- 访问日志:
/var/log/nginx/access.log,确认Cognito的回调请求是否到达Nginx - 错误日志:
/var/log/nginx/error.log,查找反向代理失败的具体错误(如连接拒绝到Gunicorn地址)
- 访问日志:
6. 检查Ubuntu本地防火墙
- 执行
sudo ufw status,确认允许Nginx端口(80)的入站请求;若未开启ufw可忽略此步骤
内容的提问来源于stack exchange,提问作者Shubham Borghare
相关产品推荐
相关产品推荐

