如何通过EC2公网IP访问Linux实例上的Flask应用?
解决EC2上Flask应用无法通过公网IP访问的问题
你的核心问题是Flask应用没有绑定到EC2实例的公网/内网网卡上——虽然代码里写了host='0.0.0.0',但你用flask run启动时,并没有触发这段代码的执行,导致应用只绑定在本地回环地址127.0.0.1,只能在实例内部访问。
具体解决步骤
1. 选择正确的启动方式
你有两种方式让Flask绑定到0.0.0.0(允许所有网卡访问):
方式一:直接运行脚本文件
假设你的Flask代码保存在app.py中,直接执行:
python app.py
这样会触发代码里的if __name__ == "__main__"逻辑,启动后会看到类似输出:
Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
方式二:用flask run命令指定绑定地址
如果习惯用flask run,需要显式指定host参数:
# 先指定你的Flask应用文件(如果没设置过环境变量) export FLASK_APP=app.py # 启动时绑定0.0.0.0和5000端口 flask run --host=0.0.0.0 --port=5000
启动后同样会看到绑定到0.0.0.0:5000的提示。
2. 验证访问
启动成功后,在本地浏览器访问http://<EC2公网IP>:5000,应该就能看到"Hello world!"的流式输出了。
3. 额外检查项(如果还是无法访问)
- 网络ACL:确认EC2实例所在子网的网络ACL,入站规则允许5000端口的TCP流量(默认ACL是放行所有的,若修改过需检查)。
- 实例防火墙:检查EC2 Linux实例上的本地防火墙,比如:
- 用
ufw的话,执行sudo ufw allow 5000开放端口; - 用
iptables的话,执行sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT添加规则。
- 用
你的示例代码是正确的,只要启动方式正确,就能让外部访问到Flask应用。
内容的提问来源于stack exchange,提问作者PeeKay
相关产品推荐
相关产品推荐

