Як отримати доступ до місцевого веб-сервера Django із зовнішнього світу


176

Я дотримувався тут інструкцій, щоб запустити 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 кожного разу, коли ви додаєте новий проект?
robenkleene

Відповіді:


303

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

Напр

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 Manag.py runserver 0.0.0.0:8000" все ще дає той же результат. Не могли б ви сказати більше про те, як я можу налаштувати Apache для обробки цього порту?

1
@ user248237: Ви запускаєте сервер розробки, це абсолютно не пов'язано з веб-сервером Apache. Сервер розробки - це окремий веб-сервер.
Фелікс Клінг

Для використання порту 80 потрібні спеціальні привілеї. Ви можете спробувати sudo python manage.py runserver 80.
S.Lott

@ S.Lott: О, дякую. Я знаю, це було в моїй думці, як це було написано, але якимось чином не ввійшов до клавіатури;)
Фелікс Клінг

1
Дозволити всім, хто ALLOWED_HOSTS = ['*']працював над мною, отримувати доступ до програми Django на Mac з мого телефону Android
Anupam

28

Мені довелося додати цей рядок до settings.py для того, щоб він працював (інакше він виявив помилку при зверненні з іншого комп’ютера)

ALLOWED_HOSTS = ['*']

потім запустив сервер за допомогою:

python manage.py runserver 0.0.0.0:9595

Також переконайтеся, що брандмауер дозволяє підключатися до цього порту


14

Виберіть одну або декілька з:

  • Ваша програма не прослуховує успішно на призначеному IP: PORT
    • Тому що ви її не налаштували успішно
    • Тому що користувач не має дозволу на
  • Ваша програма успішно прослуховує на призначеному IP: PORT, але клієнти не можуть її отримати
    • Локальні iptables сервера перешкоджають цьому.
    • Брандмауер перешкоджає цьому.

Таким чином, ви можете перевірити, чи ваша програма успішно прослуховує, запустівши lsof -iяк root на машині та шукайте pythonзапис із відповідним портом, який ви вказали.

Користувачі, котрі не користуються коренем, як правило, не можуть прив'язуватися до портів <1024.

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

Якщо є брандмауер за поточною версією, і ви мало про це знаєте, вам потрібно буде поговорити з вашими мережевими адміністраторами.


ви можете пояснити you haven't configured it successfully?
ChillarAnand

@ChillarAnand: ви просто перевіряєте, django runserverчи насправді слухає, де ви маєте намір, наприклад, використовуючи lsof.
Метт

@ChillarAnand Я пройшов кроки, які ви доручили. Використовуючи, lsofя бачу запис python для свого порту. Але моя посилання, тобто мійп: 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 = ['*']

сподіваюся, що це допоможе ...


5

Для користувачів 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 Manag.py runserver 0:80

Зараз сайт доступний у будь-якому з наведених нижче (не потрібно: 80, оскільки це за замовчуванням для http):

  • [Public DNS], тобто ec2-54-528-27-21.compute-1.amazonaws.com
  • [Public IP], тобто 75.254.65.19

2

Я збираюся додати це сюди:

  1. sudo python manage.py runserver 80

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

У цей момент вам слід підключитися до сервера Django.

Це також має працювати без судо:

python manage.py runserver 0.0.0.0:8000


0

ОНОВЛЕНО В 2020 році ПІДТРИМАЙТЕ ЦЕЙ ШЛЯХ

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.