2010-02-14 18 views
136

Postępowałem zgodnie z instrukcjami here, aby uruchomić Django za pomocą wbudowanego serwera WWW i mogłem z powodzeniem uruchomić go przy użyciu python manage.py runserver. Jeśli uzyskuję lokalny dostęp do adresu 127.0.0.1 :port z serwera WWW, otrzymuję stronę Django wskazującą, że zadziałało.Jak uzyskać dostęp do lokalnego serwera Django ze świata zewnętrznego

Zdaję sobie sprawę, że serwer WWW Django nie jest serwerem produkcyjnym, ale dla mnie ważne jest, aby w celach testowych uzyskać do niego dostęp ze świata zewnętrznego - tj. Nie z przeglądarki internetowej na serwerze, ale z innego komputera .

Próbowałem:

http://mywebserver:port_django_runs_on 

ale to nie działa. Próbowałem też użyć adresu IP (na podstawie ifconfig), aby uzyskać dostęp:

http://myipaddress:port_django_runs_on 

, które również nie działały.

Serwer internetowy działa, więc musi być dostępny z zewnątrz, po prostu nie jestem pewien jak. Używam systemu Linux z Apache, ale nie skonfigurowałem Django z Apache.

Wszelkie pomysły, jak to zrobić?

+3

Dlaczego nie skonfigurować Django z Apache i mod_wsgi? Dlaczego nie zrobić tego właściwie? –

Odpowiedz

233

Musisz uruchomić serwer programistyczny taki, aby był listens on the interface w Twojej sieci.

E.g.

python manage.py runserver 0.0.0.0:8000 

nasłuchuje na każdy interfejs na porcie 8000.

To nie ma znaczenia, czy masz dostęp do serwera WWW z IP lub nazwy hosta. Sądzę, że wciąż jesteś w swojej sieci LAN.
Jeśli naprawdę chcesz uzyskać dostęp do serwera z zewnątrz, musisz także skonfigurować router, aby przekazywał port, np. 8000 do swojego serwera.


Sprawdź swoją zaporę na serwerze, czy dozwolone są połączenia przychodzące do używanego portu!

Zakładając, można uzyskać dostęp do serwera Apache z zewnątrz, z powodzeniem można również spróbować tego:

  • Zatrzymaj serwer Apache, więc ten port 80 jest bezpłatne.
  • Uruchom serwer deweloperski z sudo python manage.py runserver 0.0.0.0:80
+1

Użycie "python manage.py runserver 0.0.0.0:8000" nadal daje taki sam wynik. Czy możesz powiedzieć więcej o tym, jak mogę skonfigurować Apache do obsługi tego portu? – user248237dfsf

+1

@ user248237: Uruchamiasz serwer programistyczny, nie ma to związku z serwerem WWW Apache. Serwer programistyczny jest autonomicznym serwerem WWW. –

+0

Wymaga specjalnych uprawnień do używania portu 80. Możesz wypróbować 'sudo python manage.py runserver 80'. –

11

Wybierz jedną lub więcej z:

  • Aplikacja nie jest skutecznie słuchania od zamierzonego IP: port
    • Ponieważ nie mają pomyślnie skonfigurowany
    • Ponieważ użytkownik nie ma uprawnień do
  • Aplikacja jest z powodzeniem słuchać od zamierzonego IP: port, ale klienci nie mogą osiągnąć to, ponieważ
    • serwerze lokalnym iptables zapobiega.
    • Zapora zapobiega temu.

Tak, można sprawdzić, czy aplikacja jest słuchanie powodzeniem działa lsof -i jako root na komputerze i poszukać wpisu python z odpowiednim portem już określony.

Zwykli użytkownicy zazwyczaj nie może wiązać się z portami < 1024.

Musisz patrzeć na iptables -nvL aby sprawdzić, czy istnieje przepis, który uniemożliwia dostęp do ip: port, które starają się powiązać Aplikować do.

Jeśli istnieje zapora ogniowa i nie wiesz zbyt wiele na jej temat, musisz porozmawiać z administratorami sieci.

+0

czy możesz wyjaśnić "nie skonfigurowałeś to się udało? – ChillarAnand

+0

@ChillarAnand: wystarczy, że sprawdzisz, czy 'django runserver' faktycznie nasłuchuje, gdzie chcesz, np. używając 'lsof'. – MattH

+0

@ChillarAnand Przeszedłem przez kroki, które poleciłeś. Używając 'lsof' widzę wpis Pythona dla mojego portu. Ale mój link, np. Myip: 8000, nie odpowiada. Wiem, że jest za późno, ale pomocne będą wszelkie sugestie. –

1

Zamierzam dodać to tutaj:

  1. sudo python manage.py runserver 80

  2. Idź do telefonu lub komputera, a następnie wprowadź adres IP komputerów wewnętrznego (np 192.168.0.12) w przeglądarce.

W tym momencie powinno być połączenie z serwerem Django.

Powinno to również pracować bez sudo:

python manage.py runserver 0.0.0.0:8000 
0

Dla użytkowników AWS.

Musiałem użyć następujących kroków, aby się tam dostać.

1) Upewnić się, że PIP i Django są instalowane na poziomie sudo

  • sudo apt-get install python-pip
  • sudo pip zainstalować Django

2) Upewnij się, że zasady związane z grupą zabezpieczeń obejmują http na porcie 80 dla 0.0.0.0/0

  • konfigurowane poprzez konsolę AWS

3) Dodaj publicznego adresu IP i DNS ALLOWED_HOSTS

  • ALLOWED_HOSTS jest obiekt listy, które można znaleźć w settings.py
  • ALLOWED_HOSTS = [” 75.254.65.19 "," ec2-54-528-27-21.compute-1.amazonaws.com "]

4) Uruchom serwer rozwój z sudo na porcie 80

  • sudo python manage.py runserver 0:80

Site teraz dostępna w jednej z następujących (bez konieczności: 80 jako że jest domyślną http):

  • [Public DNS] tj ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP publiczny] tj 75.254.65.19
6

musiałem dodać tę linię do settings.py w celu uczynienia go pracy (inaczej pokazał błąd podczas dostępu z innego komputera)

ALLOWED_HOSTS = ['*'] 

następnie prowadził serwer z:

python manage.py runserver 0.0.0.0:9595 

zapewniają również, że zapora zezwala na połączenia do tego portu

+0

Dzięki, to zadziałało dla mnie – Anupam

2

po prostu to zrobić:

python manage.py runserver 0:8000 

za pomocą powyższego polecenia jesteś faktycznie wiążące go do zewnętrznego adresu IP. , więc teraz, gdy uzyskasz dostęp do swojego adresu IP z numerem portu, będzie można uzyskać do niego dostęp w przeglądarce bez żadnych problemów.

wystarczy wpisać następujące w pasku adresu przeglądarki:

<your ip address>:8000 

np

192.168.1.130:8000 

może trzeba zmienić ustawienia.py dodać następujące w settings.py w ostatnim wierszu:

ALLOWED_HOSTS = ['*'] 

nadzieję, że pomoże ...

Powiązane problemy