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


当前回答

如果你在访问使用PyCharm部署的Flask服务器时遇到问题,请考虑以下因素:

PyCharm不会直接运行你的主.py文件,因此if __name__ == '__main__':中的任何代码都不会被执行,并且任何更改(如app.run(host='0.0.0.0', port=5000))都不会生效。

相反,您应该使用Run Configurations配置Flask服务器,特别是将——host 0.0.0.0——port 5000放置到附加选项字段中。

更多关于配置Flask服务器在PyCharm

其他回答

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


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

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

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

If you run the server you will notice that the server is only accessible from your own computer, not from any other in the network. This is the default because in debugging mode a user of the application can execute arbitrary Python code on your computer. If you have the debugger disabled or trust the users on your network, you can make the server publicly available simply by adding --host=0.0.0.0 to the command line: $ flask run --host=0.0.0.0 This tells your operating system to listen on all public IPs.

这个答案并不仅仅与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重要数据包。删除它们,问题就解决了。

如果你的酷应用程序从外部文件加载了它的配置,就像下面的例子,那么不要忘记用HOST="0.0.0.0"更新相应的配置文件

cool.app.run(
    host=cool.app.config.get("HOST", "localhost"),
    port=cool.app.config.get("PORT", 9000)
)            

以防你需要从外部网络测试你的应用程序。 只要用ngrok.com把它提供给整个互联网 它会像开发服务器一样部署它,但很快就会在本地部署,为我节省了很多时间,不,我和那家公司没有关系:)

只需要确保在你的flask应用程序中更改端口: app.run(主机= 0.0.0.0,端口= 80)

如果你在访问使用PyCharm部署的Flask服务器时遇到问题,请考虑以下因素:

PyCharm不会直接运行你的主.py文件,因此if __name__ == '__main__':中的任何代码都不会被执行,并且任何更改(如app.run(host='0.0.0.0', port=5000))都不会生效。

相反,您应该使用Run Configurations配置Flask服务器,特别是将——host 0.0.0.0——port 5000放置到附加选项字段中。

更多关于配置Flask服务器在PyCharm