Все ли веб-серверы, работающие локально, используют файл / etc / hosts?

Я запускаю веб-сервер Django локально и хочу иметь возможность ввести www.my-site.dev или username.my-site.dev и получить эту карту для моего приложения Django.

Я видел множество решений для Apache и пытался добавить следующее в мой файл / etc / hosts, предполагая, что сервер Django также проверит /etc/hosts.

127.0.0.1:8000 www.my-site.dev  
127.0.0.1:8000 username.my-site.dev  
1
задан 27 January 2013 в 03:02

3 ответа

1116 Здесь есть несколько проблем, которые я обрисую в общих чертах. Другие уже нашли способ объяснить их, но, как разработчик Django, я могу добавить некоторые упущенные вопросы:

  • Не поймите неправильно отношения между серверами, браузерами и DNS. Браузеру необходим DNS для поиска имени и получения IP-адреса для подключения. Сервер не дает летающего банана, чьи имена указывают на его IP.
    Примечание: httpd будет, но не для целей подключения - он использует его для размещения нескольких виртуальных хостов на одном IP.
  • /etc/hosts может указать доменное имя на IP, но это все. Они не могут указать порт 8000. Это работа браузера.
  • Чтобы разместить что-то на порте 80, вам нужно запустить его как root, перенаправить порт 80 или использовать setcap, чтобы позволить Python подключить порт 80 . Последние два очень хакерские, но они бесконечно лучше, чем запуск сервера Django от имени root. Пожалуйста, никогда не делай этого.
  • Размещение нескольких серверов Django dev на одном IP-порту 80 невозможно. Все они попытаются жадно связать его и запретить дальнейшие. Вам нужно либо разбить порты, либо прикрепить httpd / reverse-proxy впереди, чтобы разделить виртуальные хосты на серверы Django.

Для разработки я просто загружаю dev-сервер как и когда мне это нужно. Я запускаю только по одному, и он работает по умолчанию 127.0.0.0:8000. Если эта модель вам подходит, и вы просто хотите разместить на своем доменном имени, просто что-то вроде этого к вашему /etc/hosts:

127.0.0.1 my.domain.ext sub.my.domain.ext

Вы можете просто продолжать цепочку их, но помните, что это будет переопределить весь исходящий трафик для запросов в этих доменах. Ака: не забывайте, что вы взломали свой собственный DNS! Оттуда вы просто загружаете http://my.domain.ext:8000 и смотрите на свой сервер разработки.

Если вы хотите http://my.domain.ext, вам придется либо взломать вещи (см. Выше), либо перейти к более традиционной инфраструктуре (ниже).


Если вам нужно запустить несколько серверов, я могу только предложить запустить правильный стек. Я бы запустил стек nginx + uwsgi + virtualenv. Что-то вроде того, что вы использовали бы в производстве. На самом деле, чем ближе вы сможете отразить производственную среду, тем лучше. Если вы используете Apache и modwsgi, сделайте это.

Это дает вам лучшую платформу для тестирования. Если вам нужно подключиться к отладке, я нахожу настройку uwsgi для ведения журнала (и отслеживания журнала) подходящей заменой для вывода с консоли в реальном времени.

0
ответ дан 27 January 2013 в 03:02

Несколько вещей

1) Django, вероятно, не ссылается на ваш файл hosts. (Я говорю, вероятно, потому что я не использую Django, но для него нет смысла ссылаться на файл hosts, так как он не должен искать сам по себе).

2) Хосты предназначены для локального разрешения имен. Это не имеет ничего общего с портами. Если вы хотите, чтобы эти два сайта разрешались на вашем локальном компьютере, вы должны указать это в файле hosts.

127.0.0.1     www.my-site.dev    username.my-site.dev  

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

www.my-site.dev:8000

Единственный способ не набирать 8000 - это заставить Django прослушивать порт 80 (или если вы делаете SSL, 443). Это должно настраиваться в Django и не должно вызывать каких-либо проблем (если вы уже не запускаете что-то, использующее порт 80).

0
ответ дан 27 January 2013 в 03:02

Я не эксперт, но, похоже, вам нужен DNS-сервер. В противном случае ваш браузер проверит всемирную паутину, чтобы попытаться найти www.my-site.dev, и не найдет ваш локальный компьютер, если вы не настроите DNS-сервер и не настроите клиентов, обращающихся к www.my-site.dev использовать DNS-сервер, который вы настроили. Затем DNS-сервер направит клиента на ваш локальный компьютер. Не обращай на меня внимания, если я ошибаюсь :)

0
ответ дан 27 January 2013 в 03:02

Другие вопросы по тегам:

Похожие вопросы: