Как получить доступ к локальному веб-серверу Django из внешнего мира - PullRequest
156 голосов
/ 14 февраля 2010

Я следовал инструкциям здесь , чтобы запустить Django, используя встроенный веб-сервер, и смог успешно запустить его, используя python manage.py runserver. Если я получаю доступ к 127.0.0.1:port локально с веб-сервера, я получаю страницу Django, указывающую, что она работает.

Я понимаю, что веб-сервер Django не является рабочим сервером, но для целей тестирования мне важно иметь возможность доступа к нему из внешнего мира, то есть не через веб-браузер на сервере, а с другого компьютера.

Я пытался:

http://mywebserver:port_django_runs_on

но это не сработало. Я также попытался использовать IP вместо этого (на основе ifconfig) для доступа:

http://myipaddress:port_django_runs_on 

, который тоже не работал.

Веб-сервер работает, поэтому он должен быть доступен снаружи, я просто не знаю как. Я использую Linux с Apache, хотя я не настроил Django с Apache.

Есть идеи, как это сделать?

Ответы [ 6 ]

271 голосов
/ 14 февраля 2010

Необходимо запустить сервер разработки таким образом, чтобы он прослушивал интерфейс вашей сети.

* 1005 Е.Г. *

python manage.py runserver 0.0.0.0:8000

прослушивает каждый интерфейс на порту 8000.

Неважно, заходите ли вы на веб-сервер с IP-адресом или именем хоста. Я предполагаю, что вы все еще находитесь в своей локальной сети.
Если вы действительно хотите получить доступ к серверу извне, вам также необходимо настроить маршрутизатор для переадресации порта, например. 8000 на ваш сервер.


Проверьте брандмауэр на сервере, разрешены ли входящие подключения к используемому порту!

Предполагая, что вы можете получить доступ к вашему серверу Apache извне, вы также можете попробовать это:

  • Остановите сервер Apache, чтобы освободить порт 80.
  • Запустите сервер разработки с sudo python manage.py runserver 0.0.0.0:80
18 голосов
/ 29 июня 2017

Мне пришлось добавить эту строку в settings.py, чтобы она заработала (в противном случае при доступе с другого компьютера была ошибка)

ALLOWED_HOSTS = ['*']

затем запустил сервер с:

python manage.py runserver 0.0.0.0:9595

Также убедитесь, что брандмауэр разрешает подключения к этому порту

13 голосов
/ 14 февраля 2010

Выберите один или несколько из:

  • Ваше приложение не успешно прослушивает предполагаемый IP: PORT
    • Поскольку вы не настроили его успешно
    • Поскольку у пользователя нет разрешения на
  • Ваше приложение успешно прослушивает намеченный IP: PORT, но клиенты не могут связаться с ним, потому что
    • Локальный сервер iptables предотвращает это.
    • Брандмауэр предотвращает это.

Итак, вы можете проверить, что ваше приложение успешно прослушивает, запустив lsof -i от имени пользователя root на машине и найти запись python с соответствующим указанным вами портом.

Пользователи без полномочий root обычно не могут связываться с портами <1024. </p>

Вам нужно будет взглянуть на iptables -nvL, чтобы увидеть, есть ли правило, запрещающее доступ к порту ip:, к которому вы пытаетесь привязать ваше приложение.

Если есть вышестоящий брандмауэр, и вы не знаете о нем много, вам нужно поговорить с сетевыми администраторами.

4 голосов
/ 16 ноября 2017

просто сделайте это:

python manage.py runserver 0:8000

с помощью приведенной выше команды вы фактически привязываете ее к внешнему IP-адресу. так что теперь, когда вы получите доступ к своему IP-адресу с помощью номера порта, вы сможете без проблем получить к нему доступ в браузере.

просто введите следующее в адресной строке браузера:

<your ip address>:8000

например:

192.168.1.130:8000

возможно, вам придется отредактировать settings.py добавьте следующее в settings.py в последней строке:

ALLOWED_HOSTS = ['*']

надеюсь, это поможет ...

2 голосов
/ 31 марта 2017

Для пользователей AWS.

Мне пришлось использовать следующие шаги, чтобы добраться туда.

1) Убедитесь, что pip и django установлены на уровне sudo

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

2) Убедитесь, что внутренние правила группы безопасности включают http на порт 80 для 0.0.0.0/0

  • настроен через консоль AWS

3) Добавить общедоступные IP-адреса и DNS для ALLOWED_HOSTS

  • ALLOWED_HOSTS - это объект списка, который вы можете найти в settings.py
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Запустить сервер разработки с sudo на порту 80

  • sudo python manage.py runserver 0: 80

Сайт теперь доступен по одному из следующих вариантов (не нужно: 80, так как это по умолчанию для http):

  • [Публичный DNS], т.е. ec2-54-528-27-21.compute-1.amazonaws.com
  • [Public IP], т. Е. 75.254.65.19
1 голос
/ 25 февраля 2016

Я собираюсь добавить это здесь:

  1. sudo python manage.py runserver 80

  2. Зайдите на телефон или компьютер и введите внутренний IP-адрес вашего компьютера (например, 192.168.0.12) в браузере.

На этом этапе вы должны быть подключены к серверу Django.

Это также должно работать без sudo:

python manage.py runserver 0.0.0.0:8000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...