我有一个非常简单的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时,它失败了
答案 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实例中,安全组限制了您进入网站的权限。
您的网站将运行
答案 3 :(得分:0)
我遇到了一个类似的问题,即 EC2 实例上的 Flask 应用程序没有响应。结果我不得不修改入站规则,因为:
要修改入站规则,请转到:
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 IP
或 0.0.0.0/0
如果您想允许所有流量。您还可以从 My IP
下拉列表中选择 source
。这将自动获取您的 IP。
保存,你就可以开始了!