如何允许与Flask的远程连接?


30

在系统内部,在虚拟机上运行,​​我可以在访问运行的服务器127.0.0.1:5000

尽管虚拟机的“远程”地址为192.168.56.101(ping和ssh正常工作),但我既无法从虚拟机也无法从本地访问192.168.50.101:5000的服务器。

我想有些事情阻止了远程连接。

这是/ etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw不活动。

我该如何解决这个问题?

Answers:


48

首先- 通过检查以下内容的输出,确保HTTP服务器正在侦听 192.168.50.101:5000或遍历所有地方(0.0.0.0:5000):

netstat -tupln | grep ':5000'

如果不是,请查阅Flask的文档以绑定到除本地主机以外的地址。

如果是,请使用iptables允许流量:

iptables -I INPUT -p tcp --dport 5000 -j ACCEPT

从Flask的文档中:

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

如果禁用了调试或信任网络上的用户,则只需将run()方法的调用更改为如下所示,就可以使服务器公开可用 :

app.run(host='0.0.0.0')

1)输出为127.0.0.1:5000 0.0.0.0:* LISTEN。这意味着服务器不监听其他本地主机的地址吗?2)我尝试过ufw allow 5000,但没有结果
Ilya Smagin

这就是为什么我建议查看Flask的文档以将其配置为侦听所有地址的原因。你看过了吗?仅允许它通过防火墙并不能解决问题。
Marcin Kaminski

是的,谢谢,我已经知道了。已经使用了localtunnel(我知道它太多了,但是可以用)。只是想了解netstat的输出“ 127.0.0.1:5000 0.0.0.0:* LISTEN”的含义。
Ilya Smagin

您不需要localtunnel :) netstat输出显示的内容是您的HTTP服务器仅接受来自本地计算机的连接。看来您需要在Flask的配置中更改SERVER_NAME变量。
Marcin Kaminski

2
在这里创建一个帐户只是为了收藏该问题并支持该答案!
Hephaestus


4

我刚遇到同样的问题。为了解决它,我更新了运行应用程序的方式:

 app.run(debug=True,host='0.0.0.0')

使用host = 0.0.0.0,让我通过本地网络访问我的应用程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.