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

177

Я следовал приведенным здесь инструкциям для запуска 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? Почему бы не сделать это правильно?
S.Lott
@ S.Lott Что если у вас на сервере много разных проектов, которые вы хотите запускать в разное время, и вы, и вы не хотите переконфигурировать Apache каждый раз, когда добавляете новый проект?
Робенклин
Отвечает ли это на ваш вопрос? Как сделать общедоступным Django? Это вообще возможно?
alexdlaird

Ответы:

304

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

Например

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. Сервер разработки является автономным веб-сервером.
Феликс Клинг
Для использования порта 80 требуются специальные привилегии. Вы можете попробовать sudo python manage.py runserver 80.
S.Lott
@ С.Лотт: О, спасибо. Я знаю, это было в моей голове, как написал это, но как-то не добрался до клавиатуры;)
Феликс Клинг
1
Позвольте всем ALLOWED_HOSTS = ['*']работать на меня, чтобы получить доступ к приложению Django на Mac с моего телефона Android
Anupam
28

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

ALLOWED_HOSTS = ['*']

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

python manage.py runserver 0.0.0.0:9595

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

Bonfix Ngetich
источник
14

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

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

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

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

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

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

Matth
источник
ты можешь объяснить you haven't configured it successfully?
ЧилларАнлан
@ChillarAnand: просто убедитесь, что django runserverслушатель действительно прослушивает, где вы его собираетесь, например, используете lsof.
MattH
@ChillarAnand я прошел шаги, которые вы проинструктировали. Используя lsofя вижу запись Python для моего порта. Но моя ссылка т.е. myip: 8000 не отвечает. Я знаю, что уже поздно, но любые предложения помогут.
WaterRocket8236
8

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

python manage.py runserver 0:8000

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

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

<your ip address>:8000

например:

192.168.1.130:8000

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

ALLOWED_HOSTS = ['*']

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

Joish
источник
5

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

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

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

  • sudo apt-get установить 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
  • [Публичный IP], то есть 75.254.65.19
datavoredan
источник
2

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

  1. sudo python manage.py runserver 80

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

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

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

python manage.py runserver 0.0.0.0:8000
James111
источник
0

Если вы используете Docker, вам необходимо убедиться, что порты также открыты

Амджад Аль Талеб
источник
0

ОБНОВЛЕНО 2020 ПОПРОБУЙТЕ ЭТОТ ПУТЬ

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
источник