Устанавливаются ли все веб-серверы локально в файле / etc / hosts?

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

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

[ f1]
1
задан 27 January 2013 в 05:02

2 ответа

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

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

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

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

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

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

2
ответ дан 25 May 2018 в 02:03

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

-1
ответ дан 25 May 2018 в 02:03
  • 1
    Разрешение имени файла хостов - & gt; DNS-сервер, поэтому, если адрес найден в файле hosts, он не будет связываться с DNS, чтобы попытаться разрешить имя. – tgm4883 27 January 2013 в 06:19

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

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