Come accedere al server web Django locale dal mondo esterno


177

Ho seguito le istruzioni qui per eseguire Django utilizzando il webserver integrato e sono riuscito a eseguirlo con successo 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.

Mi rendo conto che il webserver Django non è un server di produzione, ma è importante per me a scopo di test poter accedervi dal mondo esterno, ovvero non da un browser Web sul server, ma da un computer diverso.

Provai:

http://mywebserver:port_django_runs_on

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

http://myipaddress:port_django_runs_on 

che non ha funzionato neanche.

Il web server è in esecuzione, quindi deve essere accessibile dall'esterno, non sono sicuro di come. Sto eseguendo 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?
S. Lott,

@ S.Lott Cosa succede se si hanno molti progetti diversi sul server che si desidera eseguire in momenti diversi e tu e non vuoi riconfigurare Apache ogni volta che aggiungi un nuovo progetto?
robenkleene,

Risposte:


304

Devi eseguire il server di sviluppo in modo che sia in ascolto sull'interfaccia della tua rete.

Per esempio

python manage.py runserver 0.0.0.0:8000

ascolta su ogni interfaccia sulla porta 8000.

Non importa se accedi al server web con l'IP o il nome host. Immagino che tu sia ancora nella tua stessa LAN.
Se vuoi davvero accedere al server dall'esterno, devi anche configurare il tuo router per inoltrare la porta, ad es. Al 8000tuo server.


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

Supponendo che tu possa accedere correttamente al tuo server Apache dall'esterno, puoi anche provare questo:

  • Arrestare il server Apache, in modo che la porta 80sia libera.
  • Avviare il server di sviluppo con sudo python manage.py runserver 0.0.0.0:80

1
L'uso di "python manage.py RunServer 0.0.0.0:8000" fornisce ancora lo stesso risultato. Potresti dire di più su come posso configurare Apache per gestire questa porta?

1
@ user248237: esegui il server di sviluppo, questo è totalmente estraneo al server web Apache. Il server di sviluppo è un server Web autonomo.
Felix Kling,

Richiede privilegi speciali per usare la porta 80. Puoi provare a sudo python manage.py runserver 80.
S. Lott

@ S.Lott: Oh grazie. Lo so, era nella mia mente come l'ho scritto ma in qualche modo non è arrivato alla tastiera;)
Felix Kling

1
Consentire a tutti quelli che hanno ALLOWED_HOSTS = ['*']lavorato per me di accedere all'app Django su un Mac dal mio telefono Android
Anupam,

28

Ho dovuto aggiungere questa linea a settings.py per farlo funzionare (altrimenti ha mostrato un errore quando si accede da un altro computer)

ALLOWED_HOSTS = ['*']

quindi ha eseguito il server con:

python manage.py runserver 0.0.0.0:9595

Assicurati anche che il firewall consenta connessioni a quella porta


14

Scegli uno o più tra:

  • L'applicazione non sta ascoltando correttamente sull'IP previsto: PORT
    • Perché non l'hai configurato correttamente
    • Perché l'utente non ha il permesso di farlo
  • L'applicazione sta ascoltando correttamente sull'IP previsto: PORT, ma i client non possono raggiungerlo perché
    • Il server iptables locale lo impedisce.
    • Un firewall lo impedisce.

Quindi, puoi verificare che l'applicazione stia ascoltando correttamente eseguendo lsof -icome root sul computer e cercare una pythonvoce con la porta corrispondente che hai specificato.

Gli utenti non root generalmente non possono collegarsi alle porte <1024.

Dovrai iptables -nvLverificare se esiste una regola che impedisce l'accesso alla porta ip: a cui stai tentando di associare l'applicazione.

Se esiste un firewall a monte e non ne sai molto, dovrai parlare con i tuoi amministratori di rete.


puoi spiegarmi you haven't configured it successfully?
Chillar e il

@ChillarAnand: semplicemente che controlli che l' django runserverascoltino effettivamente dove vuoi che sia, ad es lsof. Usando .
Matt

@ChillarAnand Ho seguito i passaggi che hai indicato. Usando lsofvedo una voce Python per la mia porta. Ma il mio link cioè myip: 8000 non risponde. So che è tardi, ma eventuali suggerimenti aiuteranno.
WaterRocket8236,

8

fai solo questo:

python manage.py runserver 0:8000

con il comando sopra lo stai effettivamente legando 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

per esempio:

192.168.1.130:8000

potrebbe essere necessario modificare settings.py aggiungere quanto segue in settings.py nell'ultima riga:

ALLOWED_HOSTS = ['*']

spero che questo possa aiutare ...


5

Per utenti AWS.

Ho dovuto usare i seguenti passi per arrivarci.

1) Assicurarsi che pip e django siano installati a livello di sudo

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

2) Assicurarsi che le regole inbound 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 a ALLOWED_HOSTS

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

4) Avviare il server di sviluppo con sudo sulla porta 80

  • sudo python manage.py corsa server 0:80

Sito ora disponibile in uno dei seguenti modi (non è necessario: 80 dato che è predefinito per http):

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

2

Ho intenzione di aggiungere questo qui:

  1. sudo python manage.py runserver 80

  2. Vai al tuo telefono o computer e inserisci l'IP interno del tuo computer (ad es. 192.168.0.12) Nel browser.

A questo punto dovresti essere connesso al server Django.

Questo dovrebbe funzionare anche senza sudo:

python manage.py runserver 0.0.0.0:8000


0

AGGIORNATO 2020 PROVA QUESTO MODO

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
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.