我不确定这是否是特定的Flask,但当我在dev模式下运行应用程序(http://localhost:5000)时,我无法从网络上的其他机器访问它(使用http://[dev-host-ip]:5000)。例如,当Rails处于开发模式时,它工作得很好。我找不到任何关于Flask开发服务器配置的文档。你知道应该配置什么来实现这个功能吗?
当前回答
以防你需要从外部网络测试你的应用程序。 只要用ngrok.com把它提供给整个互联网 它会像开发服务器一样部署它,但很快就会在本地部署,为我节省了很多时间,不,我和那家公司没有关系:)
只需要确保在你的flask应用程序中更改端口: app.run(主机= 0.0.0.0,端口= 80)
其他回答
您还可以通过环境变量设置主机(将其暴露在面向IP地址的网络上)和端口。
$ 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有关,而是应该适用于所有无法从其他主机连接服务的问题。
使用netstat -ano | grep <port>查看地址是否为0.0.0.0或::。如果它是127.0.0.1,那么它仅用于本地请求。 使用tcpdump查看是否有数据包丢失。如果有明显的不平衡,请通过iptables检查路由规则。
今天我像往常一样运行我的flask应用程序,但我注意到它不能从其他服务器连接。然后我运行netstat -ano | grep <端口>,本地地址是::或0.0.0.0(我都尝试了,我知道127.0.0.1只允许从本地主机连接)。然后我使用telnet主机端口,结果就像连接到....这很奇怪。然后我想我最好用tcpdump -i any port <port> -w w.pcap检查它。我注意到它是这样的:
然后通过检查iptables——list OUTPUT部分,我可以看到几个规则:
这些规则禁止在握手时输出TCP重要数据包。删除它们,问题就解决了。
以防你需要从外部网络测试你的应用程序。 只要用ngrok.com把它提供给整个互联网 它会像开发服务器一样部署它,但很快就会在本地部署,为我节省了很多时间,不,我和那家公司没有关系:)
只需要确保在你的flask应用程序中更改端口: app.run(主机= 0.0.0.0,端口= 80)
检查服务器上的特定端口是否打开以服务客户端?
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
我也有同样的问题,我使用PyCharm作为编辑器,当我创建项目时,PyCharm创建了一个Flask服务器。我所做的就是用Python创建一个服务器,方法如下:
基本上我所做的就是创建一个新的服务器,如果不是python的话,就是flask
我希望这对你有所帮助
推荐文章
- 使用Pandas将列转换为行
- 从matplotlib中的颜色映射中获取单个颜色
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列