2010-02-14 15 views
136

Ho seguito le istruzioni here per eseguire Django utilizzando il server web integrato ed è stato in grado di eseguirlo correttamente utilizzando python manage.py runserver. Se accedo a 127.0.0.1:port localmente dal server web, ottengo la pagina Django che indica che ha funzionato.Come accedere al server web locale Django dal mondo esterno

Mi rendo conto che il server Web Django non è un server di produzione, ma è importante per me ai fini del test essere in grado di accedervi dal mondo esterno, ad esempio non da un browser Web sul server, ma da un altro computer .

ho provato:

http://mywebserver:port_django_runs_on 

ma non ha funzionato. Ho anche provato a utilizzare l'IP invece (basato su ifconfig) per accedere a:

http://myipaddress:port_django_runs_on 

che non ha funzionato neanche.

Il server Web è in esecuzione quindi deve essere accessibile dall'esterno, non so come. Sto usando Linux con Apache, anche se non ho configurato Django con Apache.

Qualche idea su come fare questo?

+3

Perché non configurare Django con Apache e mod_wsgi? Perché non farlo correttamente? –

risposta

233

È necessario eseguire il server di sviluppo in modo che sia listens on the interface sulla rete.

E.g.

python manage.py runserver 0.0.0.0:8000 

ascolta su ogni interfaccia sulla porta 8000.

Non importa se si accede al server web con l'indirizzo IP o il nome dell'host. Immagino che tu sia ancora nella tua LAN.
Se si desidera davvero accedere al server dall'esterno, è necessario configurare il router per inoltrare la porta, ad es. 8000 al tuo server.


Controllare il firewall sul server se sono consentite connessioni in entrata alla porta in uso!

Supponendo che si può accedere al server Apache dall'esterno con successo, si può anche provare questo:

  • arrestare il server Apache, in modo che la porta 80 è libero.
  • avviare il server di sviluppo con sudo python manage.py runserver 0.0.0.0:80
+1

L'utilizzo di "python manage.py runserver 0.0.0.0:8000" restituisce lo stesso risultato. Potresti dire di più su come posso configurare Apache per gestire questa porta? – user248237dfsf

+1

@ user248237: si esegue il server di sviluppo, questo è totalmente non correlato al server Web Apache. Il server di sviluppo è un server Web standalone. –

+0

Richiede privilegi speciali per usare la porta 80. Puoi provare un 'sudo python manage.py runserver 80'. –

11

Scegli uno o più da:

  • L'applicazione non è in ascolto con successo sul IP previsto: PORT
    • Perché non l'hai configurato correttamente
    • Perché l'utente non dispone dell'autorizzazione per
  • L'applicazione è in ascolto con successo sul IP previsto: PORT, ma i clienti non può raggiungere perché
    • Il server iptables locali impedisce.
    • Un firewall lo impedisce.

Quindi, si può verificare che l'applicazione è in ascolto con successo eseguendo lsof -i come root sulla macchina e cercare una voce python con la porta corrispondente che hai specificato.

utenti non-root in genere non possono collegarsi alle porte < 1024.

Avrete bisogno di guardare iptables -nvL per vedere se c'è una regola che impedirebbe l'accesso al ip: porta che si sta tentando di vincolare il proprio applicazione a.

Se esiste un firewall upstream e non ne sai molto, devi parlare con i tuoi amministratori di rete.

+0

puoi spiegare 'non hai configurato con successo'? – ChillarAnand

+0

@ChillarAnand: semplicemente verificate che 'django runserver' stia effettivamente ascoltando dove volete che sia, ad es. usando 'lsof'. – MattH

+0

@ChillarAnand ho seguito i passaggi che hai indicato. Usando 'lsof' vedo una voce python per la mia porta. Ma il mio link i.e myip: 8000 non risponde. So che è tardi, ma qualsiasi suggerimento aiuterà. –

1

ho intenzione di aggiungere questo qui:

  1. sudo python manage.py runserver 80

  2. Vai sul tuo cellulare o del computer e inserire il proprio computer IP interno (ad es 192.168.0.12) nel browser.

A questo punto è necessario essere connessi al server Django.

Questo dovrebbe funzionare anche senza sudo:

python manage.py runserver 0.0.0.0:8000 
0

Per gli utenti di AWS.

Ho dovuto utilizzare i seguenti passaggi per arrivarci.

1) Assicurarsi che pip e Django sono installati a livello sudo

  • sudo apt-get install python-pip
  • sudo pip install django

2) Assicurati che le regole in entrata del gruppo di sicurezza includano http sulla porta 80 per 0.0.0.0/0

  • configurato tramite console AWS

3) Aggiungi IP pubblico e DNS per allowed_hosts

  • allowed_hosts è un oggetto elenco che è possibile trovare in settings.py
  • allowed_hosts = [" 75.254.65.19 "," ec2-54-528-27-21.compute-1.amazonaws.com "]

4) Server di sviluppo lancio con sudo sulla porta 80

  • sudo python manage.py runserver 0:80

sito ora disponibile presso uno dei seguenti (senza bisogno di: 80 come questo è di default per http):

  • [DNS pubblico] cioè ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP pubblico] cioè 75.254.65.19
6

ho dovuto aggiungere questa linea al settings.py al fine di farlo funzionare (in caso contrario ha mostrato un errore quando si accede da un altro computer)

ALLOWED_HOSTS = ['*'] 

poi corse il server con:

python manage.py runserver 0.0.0.0:9595 

assicurarsi inoltre che il firewall consente le connessioni a tale porta

+0

Grazie, ha funzionato per me – Anupam

2

solo fare questo:

python manage.py runserver 0:8000 

tramite il comando precedente lo si sta effettivamente vincolando all'indirizzo IP esterno. così ora quando accedi al tuo indirizzo IP con il numero di porta, sarai in grado di accedervi nel browser senza alcun problema.

basta digitare quanto segue nella barra degli indirizzi del browser:

<your ip address>:8000 

esempio:

192.168.1.130:8000 

potrebbe essere necessario modificare le impostazioni.py aggiungere quanto segue nel settings.py nell'ultima riga:

ALLOWED_HOSTS = ['*'] 

speranza che questo vi aiuterà ...

Problemi correlati