12

我有一个非常简单的 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')

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

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

4

5 回答 5

8

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

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

app.run(host='0.0.0.0')

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

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

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

检查入站规则。

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

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

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

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

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

猞猁本地主机:5000

于 2017-05-16T06:35:26.680 回答
4

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

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

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

于 2013-07-23T20:31:12.013 回答
1

在您的 EC2 实例中,安全组限制您访问网站。

  • 转到 AWS 门户,选择您的实例
  • 找到安全组并单击名称
  • 在入站规则窗口中,选择添加规则
  • 不是推荐的安全做法,但要使其运行,请选择所有 TCP
  • 在源中添加“0.0.0.0”

您的网站将运行

于 2020-04-15T18:41:24.270 回答
0

我遇到了类似的问题,即 EC2 实例上的 Flask 应用程序没有响应。原来我不得不修改入站规则,因为:

默认安全组和新创建的安全组包含不允许您从 Internet 访问您的实例的默认规则。

要修改入站规则,请访问:

Instances dashboard> Security> Security Groups (go to your security group)> Edit Inbound Rules> Add Rule

填写值:

Type->Custom TCP

Protocol->TCP

Port range-> 5000(如果您的烧瓶应用程序在默认端口上运行)

Source->Your IP或者0.0.0.0/0如果您想允许所有流量。您也可以My IPsource下拉列表中选择。这将自动获取您的IP。

保存,您就可以开始了!

于 2021-03-18T09:42:17.167 回答
0

由于您已经在您的应用程序中使用了 host="0.0.0.0" 它应该可以从任何地方访问。阻止它的唯一想法是您的 aws 安全组入站规则。为端口 0-65535(您的应用程序端口应在此范围内)添加一个 All TCP 入站规则,源为 0.0.0.0/0,它应该可以工作。

在此处输入图像描述

于 2021-09-21T14:25:48.370 回答