web-dev-qa-db-fra.com

Comment autoriser les connexions distantes à Flask?

À l'intérieur du système, exécuté sur une machine virtuelle, je peux accéder au serveur en cours d'exécution à 127.0.0.1:5000.

Bien que l'adresse 'distante' de la machine virtuelle soit 192.168.56.101 (ping et ssh fonctionnent correctement), je ne peux pas accéder au serveur avec 192.168.50.101:5000 ni à partir de la machine virtuelle ni de la machine locale.

Je suppose qu'il y a quelque chose qui empêche les connexions à distance.

Voici/etc/network/interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

ufw est inactif.

Comment puis-je résoudre ce problème?

30
Ilya Smagin

Tout d’abord, assurez-vous que votre serveur HTTP est à l’écoute sur 192.168.50.101:5000 ou partout (0.0.0.0:5000) en vérifiant le résultat de:

netstat -tupln | grep ':5000'

Si ce n'est pas le cas, consultez documentation de Flask pour vous connecter à une adresse autre que localhost.

Si c'est le cas, autorisez le trafic à l'aide d'iptables:

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

De la documentation de Flask:

Serveur visible de l'extérieur Si vous exécutez le serveur, vous remarquerez que celui-ci n'est accessible que depuis votre propre ordinateur, et non depuis un autre ordinateur du réseau. Ceci est la valeur par défaut car en mode débogage, un utilisateur de l'application peut exécuter du code Python arbitraire sur votre ordinateur.

Si le débogage est désactivé ou si vous faites confiance aux utilisateurs de votre réseau, vous pouvez rendre le serveur accessible au public en modifiant simplement l'appel de la méthode run() pour qu'il ressemble à ceci:

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

La meilleure façon de le faire

flask run --Host=0.0.0.0
6
Hassaan

Je viens d'avoir le même problème. Pour le résoudre, j'ai mis à jour le mode d'exécution de l'application:

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

Avec Host = 0.0.0.0, laissez-moi accéder à mon application via mon réseau local.

4
Alex andre