web-dev-qa-db-fra.com

Comment accéder au serveur Web local Django du monde extérieur)

J'ai suivi les instructions ici pour exécuter Django en utilisant le serveur Web intégré et ai pu l'exécuter avec succès en utilisant python manage.py runserver. Si j'accède à 127.0.0.1:port localement à partir du serveur Web, la page Django) s'affiche et indique que cela a fonctionné.

Je réalise que le serveur Web Django n'est pas un serveur de production, mais il est important pour moi de pouvoir y accéder depuis le monde extérieur - c.-à-d. Pas à partir d'un navigateur Web sur le serveur, mais à partir d'un ordinateur différent.

J'ai essayé:

http://mywebserver:port_Django_runs_on

mais cela n'a pas fonctionné. J'ai aussi essayé d'utiliser l'IP à la place (basé sur ifconfig) pour accéder à:

http://myipaddress:port_Django_runs_on 

qui n'a pas fonctionné non plus.

Le serveur Web est en cours d'exécution, il doit donc être accessible de l'extérieur. Je ne sais pas comment. Je tourne sous Linux avec Apache, bien que je n’ai pas configuré Django avec Apache.

Auriez vous des idées pour faire ça?

158
user248237

Vous devez exécuter le serveur de développement de telle sorte qu'il écoute sur l'interface sur votre réseau.

Par exemple.

python manage.py runserver 0.0.0.0:8000

écoute sur chaque interface sur le port 8000.

Peu importe que vous accédiez au serveur Web avec l'adresse IP ou le nom d'hôte. Je suppose que vous êtes toujours dans votre propre réseau local.
Si vous voulez vraiment accéder au serveur de l’extérieur, vous devez également configurer votre routeur pour transférer le port, par exemple. 8000 sur votre serveur.


Vérifiez votre pare-feu sur votre serveur si les connexions entrantes au port utilisé sont autorisées!

En supposant que vous puissiez accéder à votre serveur Apache de l'extérieur avec succès, vous pouvez également essayer ceci:

  • Arrêtez le serveur Apache pour que le port 80 est libre.
  • Démarrez le serveur de développement avec Sudo python manage.py runserver 0.0.0.0:80
275
Felix Kling

Je devais ajouter cette ligne à settings.py pour que cela fonctionne (sinon, une erreur s’affiche lorsque vous y accédez depuis un autre ordinateur).

ALLOWED_HOSTS = ['*']

puis couru le serveur avec:

python manage.py runserver 0.0.0.0:9595

Assurez-vous également que le pare-feu autorise les connexions à ce port.

18

Choisissez un ou plusieurs parmi:

  • Votre application n'écoute pas correctement sur l'adresse IP souhaitée: PORT
    • Parce que vous ne l'avez pas configuré avec succès
    • Parce que l'utilisateur n'a pas la permission de
  • Votre application écoute avec succès sur l’IP prévue: PORT, mais les clients ne peuvent l’atteindre, car
    • Le serveur local iptables l’empêche.
    • Un pare-feu l'empêche.

Vous pouvez donc vérifier que votre application écoute bien en exécutant lsof -i en tant que root sur la machine et recherchez une entrée python avec le port correspondant que vous avez spécifié.

Les utilisateurs non root ne peuvent généralement pas se lier aux ports <1024.

Vous devrez regarder iptables -nvL pour voir s'il existe une règle empêchant l'accès à ip: port auquel vous essayez de lier votre application.

S'il existe un pare-feu en amont et que vous n'en savez pas grand-chose, vous devez contacter vos administrateurs réseau.

13
MattH

faites juste ceci:

python manage.py runserver 0:8000

par la commande ci-dessus, vous le liez réellement à l'adresse IP externe. alors maintenant, lorsque vous accédez à votre adresse IP avec le numéro de port, vous pourrez y accéder sans problème.

il suffit de taper ce qui suit dans la barre d'adresse du navigateur:

<your ip address>:8000

par exemple:

192.168.1.130:8000

vous devrez peut-être modifier les paramètres.py ajouter ce qui suit dans le fichier settings.py à la dernière ligne:

ALLOWED_HOSTS = ['*']

espérons que cela aidera ...

4
Joish

Pour les utilisateurs AWS.

J'ai dû suivre les étapes suivantes pour y arriver.

1) Assurez-vous que pip et Django sont installés au niveau Sudo

  • Sudo apt-get installez python-pip
  • Sudo pip installe Django

2) Assurez-vous que les règles internes du groupe de sécurité incluent http sur le port 80 pour 0.0.0.0/0

  • configuré via la console AWS

) Ajouter une adresse IP publique et DNS à ALLOWED_HOSTS

  • ALLOWED_HOSTS est un objet de liste que vous pouvez trouver dans settings.py.
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Lancer le serveur de développement avec Sudo sur le port 80

  • Sudo python manage.py runserver 0:80

Le site est maintenant disponible dans l’un des types suivants (inutile de: 80 car il s’agit de la valeur par défaut pour http):

  • [DNS public] c'est-à-dire ec2-54-528-27-21.compute-1.amazonaws.com
  • [IP publique] c'est-à-dire 75.254.65.19
3
datavoredan

Je vais ajouter ceci ici:

  1. Sudo python manage.py runserver 80

  2. Allez sur votre téléphone ou votre ordinateur et entrez l’adresse IP interne de votre ordinateur (par exemple, 192.168.0.12) dans le navigateur.

À ce stade, vous devriez être connecté au serveur Django.

Cela devrait aussi fonctionner sans Sudo:

python manage.py runserver 0.0.0.0:8000
2
James111