Come consentire connessioni remote a Flask?


30

All'interno del sistema, in esecuzione su una macchina virtuale, posso accedere al server in esecuzione su 127.0.0.1:5000.

Sebbene l'indirizzo "remoto" di VM sia 192.168.56.101 (ping e ssh funzionano correttamente), non riesco ad accedere al server con 192.168.50.101:5000 né dalla macchina virtuale né da quella locale.

Immagino che ci sia qualcosa che impedisce le connessioni remote.

Ecco / etc / network / interfaces:

auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0

uww è inattivo.

Come posso risolvere questo problema?

Risposte:


48

Prima di tutto, assicurati che il tuo server HTTP sia in ascolto su 192.168.50.101:5000o ovunque ( 0.0.0.0:5000) controllando l'output di:

netstat -tupln | grep ':5000'

In caso contrario, consultare la documentazione di Flask per collegarsi a un indirizzo diverso da localhost.

In tal caso, consenti il ​​traffico utilizzando iptables:

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

Dalla documentazione di Flask:

Server visibile esternamente Se si esegue il server, si noterà che il server è accessibile solo dal proprio computer, non da qualsiasi altro nella rete. Questo è il valore predefinito perché in modalità debug un utente dell'applicazione può eseguire codice Python arbitrario sul tuo computer.

Se il debug è disabilitato o gli utenti della rete sono affidabili, è possibile rendere il server pubblicamente disponibile semplicemente modificando la chiamata del run()metodo in questo modo:

app.run(host='0.0.0.0')

1) l'uscita è 127.0.0.1:5000 0.0.0.0:* ASCOLTA. Questo significa che il server non ascolta gli indirizzi di altri host locali? 2) Ho provato a consentire 5000, nessun risultato
— Ilya Smagin

Questo è il motivo per cui ho suggerito di consultare i documenti di Flask per configurarlo per l'ascolto su tutti gli indirizzi. L'hai visto? Consentirlo attraverso il firewall da solo non lo risolverà.
— Marcin Kaminski,

Sì, grazie, ho capito, già guardando. Localtunnel già usato (so che è troppo, ma funziona). Sto solo cercando di capire cosa significa l'output di Netstat "127.0.0.1:5000 0.0.0.0:* ASCOLTA".
— Ilya Smagin,

Non hai bisogno di localtunnel :) Ciò che l'output di netstat ti mostra è che il tuo server HTTP accetta solo connessioni dal tuo computer locale. Sembra che tu debba cambiare la variabile SERVER_NAME nella configurazione di Flask.
— Marcin Kaminski,

2
Crea un account qui solo per aggiungere la domanda ai preferiti e vota questa risposta!
— Efesto,

6

Il modo migliore per farlo

flask run --host=0.0.0.0

4

Ho appena avuto lo stesso problema. Per risolverlo, ho aggiornato il modo di eseguire l'applicazione:

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

Usando host = 0.0.0.0 fammi accedere alla mia app attraverso la mia rete locale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.