首先,我测试并确认我的 Flask Python 脚本在我的本地计算机上运行良好。但我在机器学习工作室内的 Azure 计算实例中使用它时遇到了问题。以下是我的经历:
我的命令:
flask run --host=0.0.0.0
返回如下:
* Serving Flask app "server"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://10.0.0.4:5000/ (Press CTRL+C to quit)
10.0.0.4 是此 Azure 计算实例的私有 IP,我无法使用本地计算机和 Internet 访问它。由于连接超时而返回错误。
我如何使用本地计算机和互联网访问它?
我尝试了http://(其公共IP地址):5000/ 但返回了同样的错误。
其他注意事项:为此计算实例启用了 Vnet,以及网络安全组下的端口 5000。
Azure 计算实例(在机器学习工作室中)无法通过外部 IP 访问,即使是具有分配的公共 IP 地址的实例也是如此。甚至这些实例的 SSH 也需要预先配置,而不是更改网络入站规则。
但是实际的虚拟机将允许这样做。如果您遇到类似问题,我建议您尝试使用 Azure 虚拟机。
我在尝试访问托管在 Azure 计算实例上的 Flask 应用程序时遇到了类似的问题。经过测试,我确认 Flask 应用程序在 Azure 实例中本地工作正常,但我无法使用公共 IP 地址或从本地计算机从外部访问它。这是我尝试过的方法以及解决方法:
烧瓶命令: 我运行了
flask run --host=0.0.0.0
,这使得应用程序可以在内部的所有界面上访问。但是,仍然无法从我的本地计算机或公共 IP 访问它。
公共IP访问: 我尝试使用公共 IP 访问该应用程序 (
http://<public-ip>:5000/
),但收到超时错误。
防火墙和 NSG: 由于您提到 VNet 和网络安全组 (NSG) 配置为允许端口
5000
,我认为该部分是正确的。但是,就我而言,我无法修改 NSG 设置,并且 Azure 防火墙仍然阻止访问。
由于我无法修改 NSG 设置,因此我转向 SSH 隧道 作为解决方案。通过使用 Serveo(反向 SSH 隧道服务),我能够将本地 Flask 应用程序(在端口
5000
上运行)转发到公共 URL,我可以从外部访问该 URL。
这是我使用的命令:
ssh -R diabot:80:localhost:5000 serveo.net
此命令将流量从
serveo.net
域转发到在 localhost:5000
上运行的 Flask 应用程序,使其可以通过自定义子域(如 https://diabot.serveo.net/
)进行访问。
由于修改 NSG 设置对我来说不是一个选项,因此 通过 Serveo 的 SSH 隧道 是一个完美的解决方案。这使我能够毫无问题地从外部访问我的 Flask 应用程序。如果您无法更改 NSG 设置或直接调整防火墙配置,您可能需要考虑此方法。
如果这有帮助或者您是否需要进一步帮助,请告诉我!