配置Flask开发服务器以便全网可见
我不确定这是不是Flask特有的问题,但当我在开发模式下运行一个应用(http://localhost:5000
)时,我无法从网络上的其他机器访问它(用http://[dev-host-ip]:5000
)。比如在Rails的开发模式下,这个是可以正常工作的。我找不到关于Flask开发服务器配置的相关文档。有没有什么建议可以让我配置一下,以便能访问呢?
18 个回答
如果0.0.0.0的方法不管用,可以试试这个
无聊的事
我个人在让我的应用可以通过本地服务器被其他设备(比如笔记本和手机)访问时,遇到了很多麻烦。我试过0.0.0.0的方法,但没成功。然后我又尝试了更改端口,但还是不行。经过一番尝试不同的组合,我找到了这个方法,解决了我在本地服务器上部署应用的问题。
步骤
- 获取你电脑的本地IPv4地址。
在Windows上可以通过输入
ipconfig
来获取,在Linux和Mac上则输入ifconfig
。
请注意:以上步骤需要在你运行应用的机器上进行,而不是在你访问它的机器上。同时要注意,如果你断开再重新连接网络,IPv4地址可能会改变。
现在,只需用获取到的IPv4地址运行flask应用。
flask run -h 192.168.X.X
例如,在我的情况下(见图片),我运行的是:
flask run -h 192.168.1.100
在我的手机上
可选的内容
如果你在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。
酷。
如果你用 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地址。
虽然这样做是可以的,但你不应该在生产环境中使用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。