Python 将Flask dev服务器配置为在网络上可见

Python 将Flask dev服务器配置为在网络上可见,python,flask,werkzeug,Python,Flask,Werkzeug,我不确定这是否是特定于烧瓶的,但当我在开发模式下运行应用程序时(http://localhost:5000),我无法从网络上的其他计算机访问它(使用http://[dev host ip]:5000)。例如,如果Rails处于开发模式,它就可以正常工作。我找不到任何关于Flask dev服务器配置的文档。知道应该配置什么来启用此功能吗?虽然这是可能的,但您不应该在生产中使用Flask dev服务器。Flask dev服务器的设计不是为了特别安全、稳定或高效。有关正确的解决方案,请参阅上的文档

我不确定这是否是特定于烧瓶的,但当我在开发模式下运行应用程序时(
http://localhost:5000
),我无法从网络上的其他计算机访问它(使用http://[dev host ip]:5000)。例如,如果Rails处于开发模式,它就可以正常工作。我找不到任何关于Flask dev服务器配置的文档。知道应该配置什么来启用此功能吗?

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


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

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

烧瓶在“外部可见服务器”部分对此进行了解释:

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

如果禁用了调试器或信任网络上的用户, 只需添加
--host=0.0.0.0
到命令行:

$flask run--host=0.0.0.0
这会告诉您的操作系统在所有公共IP上侦听


如果您的
cool
应用程序的配置是从外部文件加载的,如以下示例所示,那么不要忘记使用HOST=“0.0.0.0”更新相应的配置文件


如果使用
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上侦听


参考:

host='0.0.0.0'添加到
app.run`

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

如果您得到
OSError:[WinError 10013]试图以Windows上访问权限所禁止的方式访问套接字
,您可能没有使用该端口的权限,或者有其他东西正在使用它,您可以通过
netstat-na | findstr 5000
找到它。我也遇到了同样的问题,我使用PyCharm作为编辑器,当我创建项目时,PyCharm创建了一个Flask服务器。我所做的是用Python以以下方式创建一个服务器:

基本上我所做的是创建一个新服务器,但如果不是python的话


我希望它能帮助您检查服务器上的特定端口是否已打开以服务于客户端

在Ubuntu或Linux发行版中

sudo ufw enable
sudo ufw allow 5000/tcp //allow the server to handle the request on port 5000
配置应用程序以处理远程请求

app.run(host='0.0.0.0' , port=5000)


python3 app.py & #run application in background

这个答案不仅与flask有关,而且应该适用于所有无法从其他主机连接服务的问题

  • 使用
    netstat-ano | grep
    查看地址是0.0.0.0还是::。如果为127.0.0.1,则仅适用于本地请求
  • 使用tcpdump查看是否缺少任何数据包。如果显示明显的不平衡,请按iptables检查路由规则 今天我像往常一样运行我的flask应用程序,但我注意到它无法从其他服务器连接。然后我运行
    netstat-ano | grep
    ,本地地址是
    0.0.0
    (我两个都试过了,我知道127.0.0.1只允许从本地主机连接)。然后我使用了
    telnet主机端口
    ,结果就像
    连接到…
    。这很奇怪。然后我想我最好用
    tcpdump-I any port-w w.pcap
    检查它。我注意到这一切都是这样的:

    然后通过检查
    iptables--list
    OUTPUT部分,我可以看到几个规则:


    这些规则禁止在握手时输出tcp重要数据包。通过删除它们,问题就消失了

    如果0.0.0.0方法不起作用,请尝试此操作

    无聊的东西

    我个人为通过本地服务器让其他设备(笔记本电脑和手机)可以访问我的应用程序而奋斗了很多。我尝试了0.0.0.0方法,但没有成功。然后我试着改变端口,但就是不起作用。所以,在尝试了一系列不同的组合之后,我找到了这个组合,它解决了我在本地服务器上部署应用程序的问题

    步骤

  • 获取计算机的本地IPv4地址。 这可以通过在Windows上键入
    ipconfig
    和在Linux上键入
    ifconfig
    来完成 还有麦克
  • 请注意:上述步骤将在您为应用提供服务的机器上执行,而不是在您访问应用的机器上执行。还要注意,如果断开并重新连接到网络,IPv4地址可能会更改。

  • 现在,只需使用获取的IPv4地址运行flask应用程序

    flask run-h 192.168.X.X

    例如,在我的情况下(参见图),我运行它的方式是:

    烧瓶运行-h 192.168.1.100

  • app.run(host='0.0.0.0' , port=5000) python3 app.py & #run application in background
    $ export FLASK_APP=app.py
    $ export FLASK_ENV=development
    $ export FLASK_RUN_PORT=8000
    $ export FLASK_RUN_HOST=0.0.0.0
    
    $ flask run
     * Serving Flask app "app.py" (lazy loading)
     * Environment: development
     * Debug mode: on
     * Running on https://0.0.0.0:8000/ (Press CTRL+C to quit)
     * Restarting with stat
     * Debugger is active!
     * Debugger PIN: 329-665-000
    
    FLASK_APP=app.py
    FLASK_ENV=development
    FLASK_RUN_HOST=[dev-host-ip]
    FLASK_RUN_PORT=5000