Flask部署AWS EC2仅根路径可用,其他端点均404,求排查思路
问题排查与解决方案
1. 修正Flask监听地址
Flask默认仅监听本地回环地址127.0.0.1,这会导致只有EC2本机能访问所有端点,公网请求无法直接触达非根路径。修改app.py中的启动代码,将监听地址改为0.0.0.0:
if __name__ == "__main__": app.run(host='0.0.0.0', debug=True) # 生产环境建议关闭debug模式
修改后重启Flask服务,再通过公网IP访问/test等端点测试。
2. 检查反向代理(如Nginx)配置
如果使用Nginx做反向代理,确保配置文件中location块正确转发所有路径请求,且包含必要的请求头。示例正确配置:
server { listen 80; server_name 你的EC2公网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; } }
配置完成后执行命令重新加载Nginx:
sudo systemctl reload nginx
3. 确认WSGI服务器(如Gunicorn)启动参数
若使用Gunicorn部署,确保启动命令绑定了0.0.0.0而非仅127.0.0.1,且正确指向Flask应用实例:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
其中app:app表示从app.py文件加载名为app的Flask实例,-b指定监听地址和端口。
4. 验证EC2安全组规则
虽然根路径可访问,但仍需确认安全组已开放对应端口(如8000或Nginx使用的80/443)的入站权限,允许所有IP(0.0.0.0/0)访问。
内容的提问来源于stack exchange,提问作者cmcau
相关产品推荐
相关产品推荐

