web-dev-qa-db-ja.com

Flaskへのリモート接続を許可する方法は?

仮想マシンで実行されているシステム内で、127.0.0.1:5000で実行中のサーバーにアクセスできます。

Vmの「リモート」アドレスは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は非アクティブです。

この問題を修正するにはどうすればよいですか?

30
Ilya Smagin

まず、次の出力を確認して、HTTPサーバーが192.168.50.101:5000またはすべての場所(0.0.0.0:5000)でリッスンしていることを確認します。

netstat -tupln | grep ':5000'

そうでない場合は、 Flaskのドキュメント を参照して、localhost以外のアドレスにバインドします。

存在する場合、iptablesを使用してトラフィックを許可します。

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

Flaskのドキュメントから:

外部から見えるサーバーサーバーを実行すると、サーバーは自分のコンピューターからのみアクセスでき、ネットワーク内の他のサーバーからはアクセスできないことに気付くでしょう。デバッグモードでは、アプリケーションのユーザーがコンピューター上で任意のPythonコードを実行できるため、これがデフォルトです。

デバッグを無効にしている場合、またはネットワーク上のユーザーを信頼している場合は、run()メソッドの呼び出しを次のように変更するだけで、サーバーを公開できます。

app.run(Host='0.0.0.0')
48
Marcin Kaminski

最善の方法

flask run --Host=0.0.0.0
6
Hassaan

同じ問題が発生しました。それを解決するために、アプリケーションを実行する方法を更新しました:

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

Host = 0.0.0.0を使用すると、ローカルネットワーク経由でアプリにアクセスできます。

4
Alex andre