我有一个运行在AWS Ubuntu服务器上端口为5000的Flask应用程序(Flask默认运行在端口5000)。但是当我尝试访问该端口时,它从未连接成功。
我在AWS控制台上添加了一个安全组,类型为自定义TCP
,端口为5000
,IP地址为0.0.0.0/0
,但仍然无法访问。
我需要重新启动服务器吗?还是我错过了什么细节?
如果需要提供任何其他信息,请告诉我。
我有一个运行在AWS Ubuntu服务器上端口为5000的Flask应用程序(Flask默认运行在端口5000)。但是当我尝试访问该端口时,它从未连接成功。
我在AWS控制台上添加了一个安全组,类型为自定义TCP
,端口为5000
,IP地址为0.0.0.0/0
,但仍然无法访问。
我需要重新启动服务器吗?还是我错过了什么细节?
如果需要提供任何其他信息,请告诉我。
除了允许安全组通过端口5000进行访问外,您还需要确保应用程序在可以接受来自外部的TCP连接的IP上进行侦听。要侦听所有IP,请在您的应用程序中使用以下命令:
if __name__ == '__main__':
app.run(host='0.0.0.0', debug = False)
不是:
if __name__ == '__main__':
app.run(host='127.0.0.1', debug = False)
要查看您的应用程序正在侦听的地址,您可以运行此命令:
netstat -an | grep :5000
进行这些更改后,您需要重新启动Flask应用程序。
我假设您只是在开发和测试时使用它,因为您将其保留在端口5000
上,但是当您准备将应用程序部署到生产环境中时,您需要将其放在真正的Web服务器后面。我建议使用nginx与uWSGI。这里有一个指南来配置Flask + nginx + uWSGI,并且这里是来自Flask的官方文档相关主题。
除了@Will的回答之外,可能你正在使用的Ubuntu AMI默认带有限制性的iptables规则。
sudo iptables -L
列出任何当前存在的规则。 使用:
sudo iptables -A INPUT -p tcp --dport 5000 -j ACCEPT
如有必要,请打开端口。
netstat -an | grep :5000
的输出吗? - Will