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


30

仮想マシンで実行されているシステム内で、実行中のサーバーにアクセスできます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は非アクティブです。

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

回答:


48

まず最初に、次の出力をチェックして、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')

1)出力は127.0.0.1:5000 0.0.0.0:* LISTENです。これは、サーバーが他のローカルホストのアドレスをリッスンしないことを意味しますか?2)私はufw allow 5000を試しましたが、結果はありません
イリヤスマギン

これが、Flaskのドキュメントを参照して、すべてのアドレスでリッスンするように構成することを提案した理由です。見たことある?ファイアウォールだけで許可しても、修正されません。
マルシンカミンスキー

はい、ありがとうございます、すでに探しています。すでにlocaltunnelを使用しています(多すぎることはわかっていますが、動作します)。netstatの出力「127.0.0.1:5000 0.0.0.0:* LISTEN」の意味を理解しようとしています。
イリヤスマギン

localtunnelは必要ありません:) netstatの出力が示すことは、HTTPサーバーがローカルマシンからの接続のみを受け入れていることです。Flaskの設定でSERVER_NAME変数を変更する必要があるようです。
マルシンカミンスキー

2
質問をお気に入りにしてこの回答に賛成するために、ここにアカウントを作成しました!
ヘファイストス


4

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.