Dış dünyadan yerel Django web sunucusuna nasıl erişilir


176

Ben talimatlarına burada yerleşik web sunucusu kullanıyorsanız Django çalıştırmak ve başarılı bir şekilde kullanarak çalıştırmak başardı python manage.py runserver. Web sunucusundan yerel olarak 127.0.0.1:port'a erişirsem, çalıştığını gösteren Django sayfasını alıyorum.

Django web sunucusunun bir üretim sunucusu olmadığını anlıyorum, ancak test amacıyla ona dış dünyadan erişebilmem önemli - yani sunucudaki bir web tarayıcısından değil, farklı bir bilgisayardan.

Denedim:

http://mywebserver:port_django_runs_on

Ama çalışmadı. Ayrıca erişmek için IP yerine (ifconfig dayalı) kullanmayı denedim:

http://myipaddress:port_django_runs_on 

ki bu da işe yaramadı.

Web sunucusu çalışıyor, bu yüzden dışarıdan erişilebilir olmalı, nasıl olduğundan emin değilim. Apache ile Linux çalıştırıyorum, ancak Django'yu Apache ile yapılandırmadım.

Bunun nasıl yapılacağı hakkında bir fikrin var mı?


3
Neden Django'yu Apache ve mod_wsgi ile yapılandırmıyorsunuz? Bunu neden düzgün yapmıyorsunuz?
S.Lott

@ S.Lott Sunucuda farklı zamanlarda çalıştırmak istediğiniz birçok farklı projeniz varsa ve siz her yeni proje eklediğinizde Apache'yi yeniden yapılandırmak istemiyorsanız ne olur?
robenkleene

Yanıtlar:


303

Geliştirme sunucusunu , ağınızın arabiriminde dinleyecek şekilde çalıştırmanız gerekir.

Örneğin

python manage.py runserver 0.0.0.0:8000

8000 numaralı bağlantı noktasındaki her arabirimi dinler .

Web sunucusuna IP veya ana bilgisayar adıyla erişmeniz önemli değildir. Sanırım hala kendi LAN'ındasın.
Sunucuya gerçekten dışarıdan erişmek istiyorsanız, yönlendiricinizi bağlantı noktasını örneğin 8000sunucunuza iletecek şekilde yapılandırmanız gerekir .


Sunucunuzdaki güvenlik duvarınızı, kullanılan bağlantı noktasına gelen bağlantılara izin verilip verilmediğini kontrol edin!

Apache sunucunuza dışarıdan başarıyla erişebileceğinizi varsayarsak, bunu da deneyebilirsiniz:

  • Apache sunucusunu durdurun, böylece port 80ücretsizdir.
  • Geliştirme sunucusunu aşağıdakilerle başlatın: sudo python manage.py runserver 0.0.0.0:80

1
"Python manage.py runserver 0.0.0.0:8000" kullanmak hala aynı sonucu verir. Apache'yi bu bağlantı noktasını işlemek için nasıl yapılandırabileceğim hakkında daha fazla bilgi verebilir misiniz?

1
@ user248237: Geliştirme sunucusunu çalıştırıyorsunuz, bu Apache web sunucusuyla tamamen alakasız. Geliştirme sunucusu bağımsız bir web sunucusudur.
Felix Kling

Bir deneyebilirsiniz O portu 80 kullanımı özel ayrıcalıkları gerektirir sudo python manage.py runserver 80.
S.Lott

@ S.Lott: Oh teşekkür ederim. Biliyorum, yazdığım gibi aklımdaydı ama bir şekilde klavyeye yapmadı;)
Felix Kling

1
Herkesin ALLOWED_HOSTS = ['*']Android telefonumdan bir Mac'teki Django uygulamasına erişmesine izin verdim
Anupam

28

Çalışması için bu satırı settings.py'ye eklemek zorunda kaldım (aksi takdirde başka bir bilgisayardan erişildiğinde bir hata gösterdi)

ALLOWED_HOSTS = ['*']

daha sonra sunucuyu şununla çalıştırdım:

python manage.py runserver 0.0.0.0:9595

Ayrıca güvenlik duvarının bu bağlantı noktasına bağlantılara izin verdiğinden emin olun


14

Şunlardan birini veya birkaçını seçin:

  • Uygulamanız istenen IP'yi başarıyla dinlemiyor: PORT
    • Çünkü başarılı bir şekilde yapılandırmadınız
    • Kullanıcının izni olmadığı için
  • Uygulamanız hedeflenen IP'yi başarıyla dinliyor: PORT, ancak istemciler buna ulaşamıyor çünkü
    • Sunucu yerel iptables bunu önler.
    • Güvenlik duvarı bunu engeller.

Böylece, lsof -imakinenizde kök olarak pythonçalışarak uygulamanızın başarılı bir şekilde dinlediğini kontrol edebilir ve belirttiğiniz karşılık gelen bağlantı noktasına sahip bir giriş arayabilirsiniz .

Kök olmayan kullanıcılar genellikle 1024'ten küçük bağlantı noktalarına bağlanamaz.

iptables -nvLUygulamanızı bağlamaya çalıştığınız ip: bağlantı noktasına erişimi önleyecek bir kural olup olmadığını görmek için bakmanız gerekir .

Bir yukarı akış güvenlik duvarı varsa ve bu konuda fazla bir şey bilmiyorsanız, ağ yöneticilerinizle konuşmanız gerekir.


açıklayabilir you haven't configured it successfullymisin
ChillarAnand

@ChillarAnand: basitçe onun olmasını istediğiniz django runserveryerde dinlediğini kontrol edip etmediğinizi , örneğin kullanarak lsof.
MattH

Ve talimat verdiğin adımlardan geçtim. Kullanarak lsofportum için bir python girişi görüyorum. Fakat bağlantım yani myip: 8000 yanıt vermiyor. Geç olduğunu biliyorum ama herhangi bir öneri yardımcı olacaktır.
WaterRocket8236 18:17

8

sadece bunu yap:

python manage.py runserver 0:8000

Yukarıdaki komutla, onu harici IP adresine bağlarsınız. IP adresinize port numarası ile eriştiğinizde, tarayıcıya herhangi bir sorun yaşamadan erişebileceksiniz.

tarayıcı adres çubuğuna aşağıdakileri yazmanız yeterlidir:

<your ip address>:8000

Örneğin:

192.168.1.130:8000

settings.py öğesini düzenlemeniz gerekebilir, son satırdaki settings.py dosyasına aşağıdakileri ekleyin:

ALLOWED_HOSTS = ['*']

Umarım bu yardımcı olur ...


5

AWS kullanıcıları için.

Oraya ulaşmak için aşağıdaki adımları kullanmak zorunda kaldım.

1) Pip ve django'nun sudo seviyesinde kurulduğundan emin olun

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

2) Güvenlik grubu bağlı kurallarının 0.0.0.0/0 için 80 numaralı bağlantı noktasında http'yi içerdiğinden emin olun

  • AWS konsolu üzerinden yapılandırıldı

3) ALLOWED_HOSTS'a Genel IP ve DNS ekleyin

  • ALLOWED_HOSTS, settings.py içinde bulabileceğiniz bir liste nesnesidir
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) 80 numaralı bağlantı noktasında sudo ile geliştirme sunucusunu başlatın

  • sudo python manage.py runserver 0:80

Site şimdi aşağıdakilerden herhangi birinde kullanılabilir (http için varsayılan olarak 80 şeye gerek yoktur):

  • [Herkese Açık DNS] yani ec2-54-528-27-21.compute-1.amazonaws.com
  • [Genel IP] yani 75.254.65.19

2

Bunu buraya ekleyeceğim:

  1. sudo python manage.py runserver 80

  2. Telefonunuza veya bilgisayarınıza gidin ve bilgisayarınızın dahili IP'sini (örn. 192.168.0.12) Tarayıcıya girin.

Bu noktada Django sunucusuna bağlı olmalısınız.

Bu sudo olmadan da çalışmalıdır:

python manage.py runserver 0.0.0.0:8000

0

Docker kullanıyorsanız, bağlantı noktalarının da açık olduğundan emin olmanız gerekir


0

GÜNCELLENDİ 2020 TL BU YOL

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.