Мне нужно протестировать поддомены на моем локальном хосте. Как я могу эффективно получить результат добавления *.localhost.com
к моему /etc/hosts/
файл?
Если это невозможно, как мне обойти эту проблему? Мне нужно протестировать поддомены с подстановочными знаками на моем локальном сервере. Это сервер разработки Django, может ли сервер разработки Django обрабатывать поддомены? Может ли какое-то другое программное обеспечение / маршрутизация дать мне желаемый конечный результат?
Установить dnsmasq (В любом случае я делаю это на всех своих рабочих столах Linux как кеш DNS). В dnsmasq.conf
добавьте строку:
address=/localhost.com/127.0.0.1
Невозможно указать подстановочные знаки в /etc/hosts
файл. Либо укажите требуемые имена хостов явно, либо настройте локальный сервер имен с соответствующими правилами.
Я написал прокси DNS на Python. Он будет читать записи с подстановочными знаками в / etc / hosts. Посмотреть здесь: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py
Вам необходимо настроить DNS-сервер и иметь каждый клиент используйте его для разрешения. Сам сервер может быть чем-то «легким», как dnsmasq или такой же тяжелый, как BIND.
Лично мне нравится создавать для этого PAC-файл и заставлять мой браузер просто его использовать.
Шаг 1: создать файл, например: *.proxy.pac*
где-то (я использую свой $home
папка)
Шаг 2: вставьте этот код (пример с портом 8000):
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*localhost")) {
return "PROXY localhost:8000";
}
return "DIRECT";
}
Шаг 3: Заставьте ваш браузер использовать этот файл PAC.
Youtube видео для PAC и Firefox
Шаг 4: Теперь вы можете протестировать свое приложение, открыв: http://mysubdomain.localhost/
Шаг 5: Наслаждаться :)
Я привел в порядок свой старый проект:
https://github.com/airtonix/avahi-aliases
требования:
Преимущества перед использованием dnsmasq или прокси-сервера python dns:
Вы не можете использовать подстановочный знак в /etc/hosts
.
Посмотри Вот для хорошего пошагового руководства по работе с OS X с использованием BIND, встроенного, но неактивного DNS-сервера и Apache.
Это решение на основе DNS отлично работало в моем случае, без необходимости ничего устанавливать: https://gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)
Если вы хотите использовать dnsmasq
с участием NetworkManager
вы можете (или даже должны?) начать dnsmasq
из NetworkManager
добавляя
dns=dnsmasq
к /etc/NetworkManager/NetworkManager.conf
. Затем конфигурация dnsmasq переходит в /etc/NetworkManager/dnsmasq.conf
или /etc/NetworkManager/dnsmasq.d/
соотв.
Короткий ответ:
Ваш / etc / hosts / file не позволяет использовать подстановочные знаки или номера портов. Вам нужно будет создать по одной записи для каждого вашего поддомена.
Короткий ответ - нет. Более длинный ответ: вам нужно более четко понимать, чего вы действительно хотите достичь, потому что, возможно, есть либо лучший способ, либо другой способ достичь этого.
Для веб-хостинга (я никогда не видел, чтобы он использовался иначе) делается в DNS в сочетании с веб-сервером, поддерживающим виртуальный хостинг. Для получения дополнительной информации о записи DNS с подстановочными знаками (Википедия) и статья Хостинг подстановочных знаков с Apache и Bind для Linux с использованием bind и Apache.
В худшем случае, я полагаю, вы могли бы использовать локальный DNS-сервер.
Обычная задача для этого предмета - сопоставить каталоги с поддоменами. Очень простой способ - автоматически добавить записи из каталога в файл hosts:
#!/usr/bin/python import os hostsFile = open("/etc/hosts", "a+"); lines = hostsFile.readlines() for fileName in os.listdir('/opt/subdomainDirs'): entryExists = False for line in lines: if fileName in line: entryExists = True if not entryExists: hostsFile.write("127.0.0.1 " + fileName + ".localhost\n");
Спасибо tschundeee за то, что я считаю окончательным ответом на эту проблему, хотел бы я просто прокомментировать, но вот общая конфигурация для тех, кто пытается достичь исходной цели (все символы подстановки указывают на одну и ту же кодовую базу - ничего не устанавливать, среда разработки, т.е. , XAMPP)
файл: / etc / hosts (не для Windows)
127.0.0.1 example.local
файл: /XAMPP/etc/httpd.conf
# Virtual hosts
Include etc/extra/httpd-vhosts.conf
файл: XAMPP / etc / extra / httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin admin@example.local
DocumentRoot "/path_to_XAMPP/htdocs"
ServerName example.local
ServerAlias *.example.local
# SetEnv APP_ENVIRONMENT development
# ErrorLog "logs/example.local-error_log"
# CustomLog "logs/example.local-access_log" common
</VirtualHost>
перезапустить apache
сохраните как something.pac где хотите, а затем загрузите файл в сеть браузера> прокси> настройки auto_configuration (перезагрузите, если вы измените это)
function FindProxyForURL(url, host) {
if (shExpMatch(host, "*example.local")) {
return "PROXY example.local";
}
return "DIRECT";
}
dnsmasq у меня сработал, за исключением того, что мне пришлось сделать некоторые дополнительные шаги.
Вот полная процедура:
Подготовить /etc/resolv.conf
со следующей строкой
nameserver 127.0.0.1
Добавьте следующие строки в /etc/dnsmasq.conf
listen-address=127.0.0.1
address=/localhost.localdomain/127.0.0.1
address=/localhost/127.0.0.1
Перезапустите dnsmasq (не просто скажите dnsmasq перезагрузить файлы конфигурации)
Копирование из этого блога, вот как это сделать на Mac:
https://hedichaibi.com/how-to-setup-wildcard-dev-domains-with-dnsmasq-on-a-mac/
~ brew install dnsmasq
~ vim /usr/local/etc/dnsmasq.conf
# This file will be added to the configuration
conf-file=/Users/your_user_name/.dnsmasq/dnsmasq.conf
~ vim /Users/your_user_name/.dnsmasq/dnsmasq.conf
# example.localhost will be resolved as 127.0.0.1, including subdomains
address=/example.localhost/127.0.0.1
listen-address=127.0.0.1
~ sudo brew services stop dnsmasq
~ sudo brew services start dnsmasq
Нам нужно указать macOS использовать 127.0.0.1 в качестве первого преобразователя DNS.