Flask 分配公共 IP

问题描述

我正在尝试使用女服务员或普通烧瓶连接使我的 api 具有公共 IP,但我不能。

app = Flask(__name__)

MysqL = MysqL()
@app.route('/')
def index():
    return "Hello,world!"
if __name__ == "__main__":
    # waitress.serve(app=app,host="0.0.0.0",port=5013)
    app.run(host="10.0.***",port=5013,debug=True,threaded=True)

我只能从我的机器上访问它。但是当我尝试从外部(即任何手机或平板电脑)访问时,我无法访问它。

解决方法

虽然这是可能的,但您不应在生产中使用 Flask 开发服务器。 Flask 开发服务器的设计并不是特别安全、稳定或高效。有关正确解决方案,请参阅 deploying 上的文档。


--hostflask run 选项或 hostapp.run() 参数控制开发服务器侦听的地址。默认情况下,它在 localhost 上运行,将其更改为 flask run --host=0.0.0.0(或 app.run(host="0.0.0.0"))以在您机器的所有 IP 地址上运行。

0.0.0.0 是一个特殊值,您不能直接在浏览器中使用,您需要导航到网络上机器的实际 IP 地址。您可能还需要调整防火墙以允许外部访问端口。

Flask quickstart docs 在“外部可见服务器”部分对此进行了解释:

如果你运行服务器,你会注意到服务器只是 可以从您自己的计算机访问,而不是从网络中的任何其他计算机访问。 这是默认设置,因为在调试模式下, 应用程序可以在您的计算机上执行任意 Python 代码。

如果您禁用了调试器或信任您网络上的用户, 您只需添加即可使服务器公开可用 --host=0.0.0.0 到命令行:

$ flask run --host=0.0.0.0

这会告诉您的操作系统侦听所有公共 IP。