配置Flask开发服务器以便全网可见

710 投票
18 回答
814651 浏览
提问于 2025-04-16 23:22

我不确定这是不是Flask特有的问题,但当我在开发模式下运行一个应用(http://localhost:5000)时,我无法从网络上的其他机器访问它(用http://[dev-host-ip]:5000)。比如在Rails的开发模式下,这个是可以正常工作的。我找不到关于Flask开发服务器配置的相关文档。有没有什么建议可以让我配置一下,以便能访问呢?

18 个回答

97

如果0.0.0.0的方法不管用,可以试试这个

无聊的事

我个人在让我的应用可以通过本地服务器被其他设备(比如笔记本和手机)访问时,遇到了很多麻烦。我试过0.0.0.0的方法,但没成功。然后我又尝试了更改端口,但还是不行。经过一番尝试不同的组合,我找到了这个方法,解决了我在本地服务器上部署应用的问题。

步骤

  1. 获取你电脑的本地IPv4地址。 在Windows上可以通过输入 ipconfig 来获取,在Linux和Mac上则输入 ifconfig

IPv4 (Windows)

请注意:以上步骤需要在你运行应用的机器上进行,而不是在你访问它的机器上。同时要注意,如果你断开再重新连接网络,IPv4地址可能会改变。

  1. 现在,只需用获取到的IPv4地址运行flask应用。

    flask run -h 192.168.X.X

    例如,在我的情况下(见图片),我运行的是:

    flask run -h 192.168.1.100

running the flask app

在我的手机上

screenshot from my mobile phone

可选的内容

如果你在Windows上使用Power Shell作为命令行工具,仍然无法访问网站,可以尝试在运行应用的shell中按CTRL + C。Power Shell有时会卡住,需要一点小刺激才能恢复。这样做可能会终止服务器,但有时能解决问题。

就这些。如果你觉得这有帮助,请给个赞。

更多可选内容

我创建了一个简短的PowerShell脚本,可以在你需要IP地址时获取它:

$env:getIp = ipconfig
if ($env:getIp -match '(IPv4[\sa-zA-Z.]+:\s[0-9.]+)') {
    if ($matches[1] -match '([^a-z\s][\d]+[.\d]+)'){
        $ipv4 = $matches[1]
    }
}
echo $ipv4

把它保存为一个扩展名为.ps1的文件(用于PowerShell),在启动应用之前运行。你可以把它保存在项目文件夹中,然后这样运行:

.\getIP.ps1; flask run -h $ipv4

注意:我把上面的代码保存为getIP.ps1。

酷。

177

如果你用 flask 这个命令来启动你的服务器,可以通过输入 flask run --host=0.0.0.0 来改变默认的设置,从127.0.0.1变成可以接受外部连接。

当你运行服务器时,你会发现这个服务器只能在你自己的电脑上访问,其他网络上的电脑是无法访问的。这是因为在调试模式下,应用的用户可以在你的电脑上执行任意的Python代码,这样做是为了安全。

如果你关闭了调试功能,或者你信任你网络上的用户,你可以通过在命令行中加上 --host=0.0.0.0 来让服务器对外开放:

$ flask run --host=0.0.0.0

这条命令告诉你的操作系统监听所有公共IP地址。

参考链接: https://flask.palletsprojects.com/quickstart/

1050

虽然这样做是可以的,但你不应该在生产环境中使用Flask的开发服务器。Flask的开发服务器并不是为了安全、稳定或高效而设计的。想了解正确的解决方案,可以查看关于部署的文档。


flask run命令中的--host选项,或者app.run()中的host参数,控制着开发服务器监听哪个地址。默认情况下,它运行在localhost上。如果你想让它在你机器上的所有IP地址上运行,可以把它改成flask run --host=0.0.0.0(或者app.run(host="0.0.0.0"))。

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

Flask的快速入门文档在“外部可见的服务器”部分解释了这一点:

如果你运行服务器,你会发现这个服务器只能从你自己的电脑访问,而不能从网络上的其他电脑访问。这是默认设置,因为在调试模式下,应用程序的用户可以在你的电脑上执行任意的Python代码。

如果你禁用了调试器或者信任你网络上的用户,你可以通过在命令行中添加--host=0.0.0.0来让服务器公开可用:

$ flask run --host=0.0.0.0

这告诉你的操作系统监听所有公共IP。

撰写回答