2015-05-14 16 views
11

La questione in breveFlask - Come rendere un'app visibile esternamente attraverso un router?

Come si esegue un semplice sito web Flask basata visibile a Internet, da un PC host che è l'accesso a Internet da un router wireless?

dettagli Domanda

vorrei presentare una domanda pallone visibile a Internet, come per Quickstart Guide.

Se lancio la semplice app Flask di seguito, diventa accessibile da un computer sulla stessa rete del PC host, ma non da un dispositivo connesso tramite Internet attraverso un'altra rete.

Il problema è simile a quello discusso here e here, con l'elemento aggiunto che che parte da un PC di casa sembra suggerire che le connessioni esterne punto alla porta xx del router, non alla porta xx del PC host , come suggerito nei commenti in this post.

Quello che ho fatto

Riferimento il codice qui sotto, ecco quello che ho fatto:

  • controllato il mio IP address nel Pannello di controllo
  • disabilitata tutta la protezione di rete nella antivirus
  • run ` ipconfig/all ', essere su una macchina Windows
  • finalmente aperto un browser in un dispositivo connecte d a un'altra rete e la puntò alla appropriata IP: porta indirizzo

Il risultato è che "La pagina web non è disponibile".

Qualcuno ha riscontrato lo stesso problema? È un problema del router?

Riferimento Flask app

from flask import Flask 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return 'Hello World!' 

if __name__ == '__main__': 
    app.run(host= '0.0.0.0', port=9000, debug=False) 
+2

I router sono specificamente realizzati per prevenire questo tipo di comportamento e mantenere la vostra connessione domestica protetta dal mondo esterno. Potresti riuscire a trovare una soluzione alternativa, ma non dovresti. –

+2

È necessario configurare il router per inoltrare le richieste alla porta 9000 dell'IP del computer su cui è in esecuzione l'app pallone – reptilicus

+0

Perché si desidera eseguire questa operazione? Consiglierei di creare un sito su Heroku per qualcosa di così banale come questo. – IanAuld

risposta

10

La configurazione di base sarà quello di creare una regola che inoltrerà richiesta alla porta 80 e/o 443 a un host destinato in rete locale.

Esempio di creazione di NAT (traduzione di indirizzi) e regola di port forwarding per inoltrare richieste HTTP/S in arrivo all'host di rete locale che esegue l'applicazione python.

Ad esempio:

app.run(host= '192.168.0.58', port=9000, debug=False) 

La regola NAT dovrebbe indirizzare 192.168.0.58 sulla porta 9000.

+0

Grazie! Avanti per capire come configurare un router. – Pythonic

+0

come recuperare l'indirizzo IP host '192.168.0.58' pythonically? È possibile ? –

+0

https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib Ci sono alcuni approcci qui - la risposta accettata probabilmente non funzionerà su linux, quindi dai un'occhiata agli altri . –