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

я следовал инструкциям здесь запустить 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 ответов


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

Э. Г.

python manage.py runserver 0.0.0.0:8000

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

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


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

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

  • остановите сервер Apache, так что порт 80 бесплатно.
  • запустите сервер разработки с помощью sudo python manage.py runserver 0.0.0.0:80

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

ALLOWED_HOSTS = ['*']

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

python manage.py runserver 0.0.0.0:9595

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


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

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

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

некорневые пользователи обычно не могут привязываться к портам

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

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


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

python manage.py runserver 0:8000

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

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

<your ip address>:8000

например:

192.168.1.130:8000

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

ALLOWED_HOSTS = ['*']

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


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

  1. sudo python manage.py runserver 80

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

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

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

python manage.py runserver 0.0.0.0:8000

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

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

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

  • sudo apt-get install python-pip
  • sudo pip установить 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] i.e 75.254.65.19