Как получить доступ к локальному веб-серверу Django из внешнего мира

129

Я выполнил инструкции здесь, чтобы запустить 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.

Любые идеи о том, как это сделать?

  • 3
    Почему бы не настроить Django с Apache и mod_wsgi? Почему бы не сделать это правильно?
Теги:

6 ответов

237
Лучший ответ

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

например.

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
  • 1
    Использование «python manage.py runserver 0.0.0.0:8000» по-прежнему дает тот же результат. Не могли бы вы рассказать подробнее о том, как я могу настроить Apache для обработки этого порта?
  • 1
    @ user248237: Вы запускаете сервер разработки, это совершенно не связано с веб-сервером Apache. Сервер разработки является автономным веб-сервером.
Показать ещё 13 комментариев
11

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

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

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

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

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

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

  • 0
    Можете you haven't configured it successfully вы объяснить, что you haven't configured it successfully ?
  • 0
    @ChillarAnand: просто убедитесь, что django runserver выполнения django runserver действительно прослушивает то, что вы хотите, например, с помощью lsof .
Показать ещё 1 комментарий
2

просто выполните это:

python manage.py runserver 0:8000

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

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

<your ip address>:8000

например:

192.168.1.130:8000

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

ALLOWED_HOSTS = ['*']

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

2

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

ALLOWED_HOSTS = ['*']

затем запустил сервер с помощью:

python manage.py runserver 0.0.0.0:9595

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

  • 0
    Спасибо, это сработало для меня
1

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

  • sudo python manage.py runserver 80

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

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

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

python manage.py runserver 0.0.0.0:8000
0

Для пользователей 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 runningerver 0:80

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

  • [Public DNS], то есть ec2-54-528-27-21.compute-1.amazonaws.com
  • [Public IP] i.e 75.254.65.19

Ещё вопросы

Сообщество Overcoder
Наверх
Меню