So greifen Sie von außerhalb auf den lokalen Django-Webserver zu

175

Ich habe die Anweisungen hier befolgt , um Django mit dem integrierten Webserver auszuführen, und konnte es erfolgreich mit ausführen python manage.py runserver. Wenn ich lokal vom Webserver auf 127.0.0.1:port zugreife, wird auf der Django-Seite angezeigt, dass es funktioniert hat.

Mir ist klar, dass der Django-Webserver kein Produktionsserver ist, aber für Testzwecke ist es für mich wichtig, von außen darauf zugreifen zu können - dh nicht über einen Webbrowser auf dem Server, sondern von einem anderen Computer aus.

Ich habe es versucht:

http://mywebserver:port_django_runs_on

aber es hat nicht funktioniert. Ich habe auch versucht, stattdessen die IP (basierend auf ifconfig) zu verwenden, um auf Folgendes zuzugreifen:

http://myipaddress:port_django_runs_on 

was auch nicht funktioniert hat.

Der Webserver läuft, daher muss er von außen zugänglich sein. Ich bin mir nur nicht sicher, wie. Ich verwende Linux mit Apache, obwohl ich Django nicht mit Apache konfiguriert habe.

Irgendwelche Ideen, wie das geht?

der Blechmann
quelle
3
Warum konfigurieren Sie Django nicht mit Apache und mod_wsgi? Warum nicht richtig machen?
S.Lott
@ S.Lott Was ist, wenn Sie viele verschiedene Projekte auf dem Server haben, die Sie zu unterschiedlichen Zeiten ausführen möchten, und Sie Apache nicht jedes Mal neu konfigurieren möchten, wenn Sie ein neues Projekt hinzufügen?
Robenkleene

Antworten:

302

Sie müssen den Entwicklungsserver so ausführen, dass er die Schnittstelle zu Ihrem Netzwerk überwacht.

Z.B

python manage.py runserver 0.0.0.0:8000

Lauscht auf jeder Schnittstelle an Port 8000.

Es spielt keine Rolle, ob Sie mit der IP oder dem Hostnamen auf den Webserver zugreifen. Ich denke du bist immer noch in deinem eigenen LAN.
Wenn Sie wirklich von außen auf den Server zugreifen möchten, müssen Sie Ihren Router auch so konfigurieren, dass er den Port z 8000. B. an Ihren Server weiterleitet.


Überprüfen Sie Ihre Firewall auf Ihrem Server, ob eingehende Verbindungen zum verwendeten Port zulässig sind!

Angenommen, Sie können von außen erfolgreich auf Ihren Apache-Server zugreifen, können Sie auch Folgendes versuchen:

  • Stoppen Sie den Apache-Server, damit der Port 80frei ist.
  • Starten Sie den Entwicklungsserver mit sudo python manage.py runserver 0.0.0.0:80
Felix Kling
quelle
1
Die Verwendung von "python manage.py runserver 0.0.0.0:8000" liefert immer noch das gleiche Ergebnis. Können Sie mehr darüber sagen, wie ich Apache für diesen Port konfigurieren kann?
1
@ user248237: Sie führen den Entwicklungsserver aus. Dies hat nichts mit dem Apache-Webserver zu tun. Der Entwicklungsserver ist ein eigenständiger Webserver.
Felix Kling
Für die Verwendung von Port 80 sind spezielle Berechtigungen erforderlich. Sie können a sudo python manage.py runserver 80.
S.Lott
@ S.Lott: Oh danke. Ich weiß, es war in meinem Kopf, als ich es schrieb, aber irgendwie schaffte ich es nicht auf die Tastatur;)
Felix Kling
1
Erlaubt allen, ALLOWED_HOSTS = ['*']die für mich gearbeitet haben, von meinem Android-Handy aus auf die Django-App auf einem Mac zuzugreifen
Anupam
27

Ich musste diese Zeile zu settings.py hinzufügen, damit sie funktioniert (andernfalls wurde beim Zugriff von einem anderen Computer aus ein Fehler angezeigt).

ALLOWED_HOSTS = ['*']

dann lief der Server mit:

python manage.py runserver 0.0.0.0:9595

Stellen Sie außerdem sicher, dass die Firewall Verbindungen zu diesem Port zulässt

Bonfix Ngetich
quelle
14

Wählen Sie eine oder mehrere aus:

  • Ihre Anwendung überwacht die beabsichtigte IP: PORT nicht erfolgreich
    • Weil Sie es nicht erfolgreich konfiguriert haben
    • Weil der Benutzer keine Berechtigung dazu hat
  • Ihre Anwendung überwacht erfolgreich die beabsichtigte IP: PORT, aber Clients können sie nicht erreichen, weil
    • Die lokalen iptables des Servers verhindern dies.
    • Eine Firewall verhindert dies.

Sie können also überprüfen, ob Ihre Anwendung erfolgreich überwacht wird, indem Sie lsof -ials Root auf dem Computer ausgeführt werden, und nach einem pythonEintrag mit dem entsprechenden von Ihnen angegebenen Port suchen .

Benutzer ohne Rootberechtigung können im Allgemeinen keine Bindung an Ports <1024 herstellen.

Sie müssen prüfen iptables -nvL, ob es eine Regel gibt, die den Zugriff auf den ip: port verhindert, an den Sie Ihre Anwendung binden möchten.

Wenn es eine vorgelagerte Firewall gibt und Sie nicht viel darüber wissen, müssen Sie mit Ihren Netzwerkadministratoren sprechen.

MattH
quelle
können Sie erklären you haven't configured it successfully?
ChillarAnand
@ChillarAnand: einfach, dass Sie überprüfen, ob das django runservertatsächlich zuhört, wo Sie es beabsichtigen, z lsof. B. mit .
MattH
@ChillarAnand Ich habe die Schritte durchlaufen, die Sie angewiesen haben. Mit lsofIch sehe einen Python-Eintrag für meinen Port. Aber mein Link, dh myip: 8000, antwortet nicht. Ich weiß, dass es spät ist, aber alle Vorschläge werden helfen.
WaterRocket8236
8

mach das einfach:

python manage.py runserver 0:8000

Mit dem obigen Befehl binden Sie es tatsächlich an die externe IP-Adresse. Wenn Sie jetzt mit der Portnummer auf Ihre IP-Adresse zugreifen, können Sie problemlos im Browser darauf zugreifen.

Geben Sie einfach Folgendes in die Adressleiste des Browsers ein:

<your ip address>:8000

z.B:

192.168.1.130:8000

Möglicherweise müssen Sie die settings.py bearbeiten. Fügen Sie in der settings.py in der letzten Zeile Folgendes hinzu:

ALLOWED_HOSTS = ['*']

hoffe das wird helfen ...

Joish
quelle
5

Für AWS-Benutzer.

Ich musste die folgenden Schritte ausführen, um dorthin zu gelangen.

1) Stellen Sie sicher, dass Pip und Django auf Sudo-Ebene installiert sind

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

2) Stellen Sie sicher, dass die an die Sicherheitsgruppe gebundenen Regeln http an Port 80 für 0.0.0.0/0 enthalten

  • über die AWS-Konsole konfiguriert

3) Fügen Sie ALLOWED_HOSTS öffentliche IP und DNS hinzu

  • ALLOWED_HOSTS ist ein Listenobjekt, das Sie in settings.py finden
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Starten Sie den Entwicklungsserver mit sudo auf Port 80

  • sudo python manage.py runserver 0:80

Die Site ist jetzt unter einer der folgenden Optionen verfügbar (keine Notwendigkeit für: 80, da dies die Standardeinstellung für http ist):

  • [Öffentliches DNS] dh ec2-54-528-27-21.compute-1.amazonaws.com
  • [Öffentliche IP] dh 75.254.65.19
datavoredan
quelle
2

Ich werde dies hier hinzufügen:

  1. sudo python manage.py runserver 80

  2. Gehen Sie zu Ihrem Telefon oder Computer und geben Sie die interne IP Ihres Computers (z. B. 192.168.0.12) in den Browser ein.

Zu diesem Zeitpunkt sollten Sie mit dem Django-Server verbunden sein.

Dies sollte auch ohne sudo funktionieren:

python manage.py runserver 0.0.0.0:8000
James111
quelle
0

Wenn Sie Docker verwenden, müssen Sie sicherstellen, dass auch Ports verfügbar sind

Amjad Al Taleb
quelle
0

AKTUALISIERT 2020 VERSUCHEN SIE DIESEN WEG

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
quelle