Я запускаю веб-сервер Django локально, и я хочу иметь возможность вводить www.my-site.dev или username.my-site.dev и иметь эту карту в своем приложении Django.
Я видел много решений для Apache и попытался добавить следующее в файл / etc / hosts, предполагая, что сервер Django также проверит /etc/hosts.
[ f1]Здесь есть несколько проблем, о которых я расскажу. Другие уже объяснили это, но, как разработчик 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 до регистрации (и мониторинга журнала) подходящей замены для выхода в реальном времени на консоль.
Я не эксперт, но похоже, что вам нужен DNS-сервер. В противном случае ваш браузер проверит всемирную сеть, чтобы попытаться найти сайт www.my-site.dev, и не найдет вашу локальную машину, если вы не настроите DNS-сервер и не настроили всех клиентов, обращающихся к www.my-site.dev для использования настроенного сервера DNS. Затем DNS-сервер укажет клиента на ваш локальный компьютер. Игнорируйте меня, если я ошибаюсь:)