Flask Web应用程序无法响应EC2上的外部请求

sed*_*idw 5 amazon-ec2 amazon-web-services flask python-2.7

我有一个非常简单的Flask应用程序,我在Amazon EC2节点上托管,无论出于什么原因我都无法在外部看到它.烧瓶应用程序在这里

from flask import Flask

app = Flask(__name__)
app.config['DEBUG'] = False

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/p1')
def p1():
    return "P1!!!"

if __name__ == '__main__':
    app.run(host='0.0.0.0')
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,看起来服务器运行正常,所以在我的浏览器中(在另一台计算机上)我放置了以下内容:5000(我从AWS中取出的IP地址).有趣的是,它似乎只是挂起,并最终产生错误.我的猜测是我在AWS中缺少一些配置,但我不知道它是什么.任何帮助将不胜感激

编辑我尝试在我的本地计算机上部署应用程序.当我尝试使用localhost:5000从浏览器访问它时,它可以工作.当我用我的IP地址替换localhost时,它失败了

Cod*_*ers 9

在寻找同一问题的解决方案时发现了这个问题。

编辑 run.py 使flask 能够响应来自本地主机以外的请求。这个例子可以响应来自任何地方的请求。好的安全策略会使用更严格的东西。

app.run(host='0.0.0.0')

在 aws 控制面板中转到 EC2:选择实例。

浏览器应该指向来自“公共 DNS (IPv4)”的地址(来自 IPv4 公共 IP 的 ip# 也可能有用)

查找“安全组”:右键单击以在新页面上打开安全组。

检查入站规则。

默认情况下,flask 绑定到端口 5000。添加规则,允许端口 5000 上的传入 tcp 流量。

虽然好的安全协议应该限制保持开放的端口数量和允许连接的 IP 范围,但允许“任何地方”通过“所有 tcp”连接可能更容易。

注意:检查flask配置文件run.py中的默认端口是否已更改

即:下面的行将端口从默认的 5000 更改为 3000。 app.run(debug=True, port=3000)

还可以通过 ssh 连接到服务器并使用 lynx 文本浏览器的本地实例来验证端口是否响应来检查烧瓶实例是否在本地工作。IE

山猫本地主机:5000


sed*_*idw 5

能够最终回答我自己的问题,两者都真的

我在 AWS 上遇到的问题是,我的 EC2 入站不允许通过我需要的端口进行访问。

当我尝试在工作中的本地计算机上运行它时,防火墙设置更改了 localhost(和我的 IP)的地址,因此这就是为什么我无法使用 localhost:5000 之外的方式访问它

  • 好的,那么您需要更改什么才能使其在 EC2 上运行? (6认同)