【问题标题】:Flask web app not responding to external requests on EC2Flask Web 应用程序未响应 EC2 上的外部请求
【发布时间】:2013-07-23 00:18:01
【问题描述】:

我有一个非常简单的 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 时,它会失败

【问题讨论】:

  • 你能显示你正在尝试的确切网址吗?
  • 当然,看看我更新的问题
  • 不确定我是否关注你。如果您只是在本地机器上运行它,那么只需使用 127.0.0.1:5000 (localhost)。要将其部署在 EC2 上,您需要使用实际的 Web 服务器,例如 Apache 等。您是否阅读了 flask 的部署文档? flask.pocoo.org/docs/quickstart/#deploying-to-a-web-server
  • 我有,但我想知道是否有办法解决这个问题,否则告诉本地主机监听所有 IP 的意义何在。我主要问是因为网络应用程序只会在短时间内启动,如果可以的话,我宁愿在本地主机上运行它。另一个问题,如果我使用 127.0.0.1:5000,它仍然不起作用。但是 localhost:5000 确实

标签: python-2.7 amazon-web-services amazon-ec2 flask


【解决方案1】:

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

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

app.run(host='0.0.0.0')

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

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

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

检查入站规则。

flask 默认绑定到端口 5000。添加规则允许在端口 5000 上传入 tcp 流量。

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

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

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

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

lynx 本地主机:5000

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 好的,那么您需要进行哪些更改才能使其在 EC2 上运行?
    • 解决方案是什么?
    • 确实有两个问题和两个解决方案。在 AWS EC2 节点上,我必须确保允许访问正确的入站端口。我必须与工作中的 IT 部门合作,才能让我的 IP 地址在他们的网络上运行时对外可见
    • @sedavidw 你能把它添加到解决方案中吗?
    【解决方案3】:

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

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

    您的网站将运行

    【讨论】:

      【解决方案4】:

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

      The default security groups and newly created security groups include default rules that do not enable you to access your instance from the 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 IP0.0.0.0/0 如果您想允许所有流量。您也可以从source 下拉列表中选择My IP。这将自动获取您的 IP。

      保存,您就可以开始了!

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-06-12
          • 2015-11-14
          • 1970-01-01
          • 2014-05-21
          • 2016-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多