2013-07-23 161 views
3

我有一个非常简单的Flask应用程序,我在Amazon EC2节点上托管,并且出于任何原因我无法在外部看到它。该瓶的应用程序是在这里Flask web应用程序未响应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(IP地址我决绝的AWS)。有趣的是,它似乎挂起,并最终产生一个错误。我的猜测是我错过了AWS中的一些配置,但我不知道它是什么。任何帮助将不胜感激

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

+0

你能显示出你正在尝试的确切的URL吗? – codegeek

+0

当然,看我更新的问题 – sedavidw

+0

不知道我是否关注你。如果你只是在本地机器上运行它,那么只需使用127.0.0.1:5000(本地主机)。要将它部署在EC2上,您需要使用像Apache等实际的Web服务器。您是否阅读过烧瓶的部署文档? http://flask.pocoo.org/docs/quickstart/#deploying-to-a-web-server – codegeek

回答

3

之所以能够最终回答我的问题,无论是真的

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

当我想我在工作的本地机器上运行它,防火墙的设置更改本地主机(我的IP)的地址,所以这就是为什么我不能使用本地主机的外部访问它:5000

+5

好的,那么为了使它在EC2上运行,你需要改变什么? – FutureNerd

+1

解决方案是什么? –

+1

真的有两个问题和两个解决方案。在AWS EC2节点上,我必须确保允许访问正确的入站端口。我不得不与工作中的IT部门合作,以便在我的IP地址在网络上运行时在外部可见 – sedavidw

-1

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

编辑run.py以使瓶响应来自非本地主机的请求。此示例可以响应来自任何地方的请求。良好的安全策略会使用更严格的东西。

app.run(主机= '0.0.0.0')

在AWS控制面板去EC2

:选择实例。

浏览器应该指出,从“公共DNS(IPv4)的” 地址(从IPv4公网IP的IP#也可能有用)

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

检查入站规则。

默认瓶绑定到端口5000的附加规则允许端口5000

传入TCP流量,而良好的安全协议应该限制端口开着数量,允许连接的IP的范围,它可能是更容易允许“任何地方”连接“所有TCP”。

NB:检查默认端口已经在烧瓶配置文件run.py

即被改变:线之下从默认5000更改端口〜3000 app.run(调试=真,端口= 3000)

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

lynx localhost:5000