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

时间:2013-07-23 18:44:12

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

我有一个非常简单的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 个答案:

答案 0 :(得分:4)

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

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

当我尝试在我的本地计算机上运行时,防火墙设置会更改localhost(和我的IP)的地址,这就是为什么我无法在使用localhost:5000

之外访问它

答案 1 :(得分:2)

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

编辑run.py以使flask能够响应来自localhost以外的请求。 此示例允许从任何地方响应请求。良好的安全策略会使用更严格的限制。

app.run(主机= '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文本浏览器的本地实例来验证该烧瓶实例是否在本地工作,以验证端口是否正在响应。即

lynx localhost:5000

答案 2 :(得分:0)

在您的EC2实例中,安全组限制了您进入网站的权限。

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

您的网站将运行

答案 3 :(得分:0)

我遇到了一个类似的问题,即 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(如果您的 Flask 应用程序在默认端口上运行)

Source -> Your IP0.0.0.0/0 如果您想允许所有流量。您还可以从 My IP 下拉列表中选择 source。这将自动获取您的 IP。

保存,你就可以开始了!