Назад | Перейти на главную страницу

Как мне сделать поддомен с подстановочными знаками в моем файле / etc / hosts / в Linux / OSX?

Мне нужно протестировать поддомены на моем локальном хосте. Как я могу эффективно получить результат добавления *.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

требования:

  • linux, где можно установить avahi и python-avahi
  • вы в порядке с доменами .local (avahi не поддерживает другие типы)

Преимущества перед использованием dnsmasq или прокси-сервера python dns:

  • другие пользователи avahi / bonjour в вашей локальной сети могут разрешать создаваемые вами псевдонимы и объявлять их в сети (при условии, что вы разрешаете доступ к порту 5353)

Вы не можете использовать подстановочный знак в /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)

файл hosts (добавить запись)

файл: / etc / hosts (не для Windows)

127.0.0.1   example.local

Конфигурация httpd.conf (включить vhosts)

файл: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

Конфигурация 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

создать файл pac:

сохраните как something.pac где хотите, а затем загрузите файл в сеть браузера> прокси> настройки auto_configuration (перезагрузите, если вы измените это)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

dnsmasq у меня сработал, за исключением того, что мне пришлось сделать некоторые дополнительные шаги.

Вот полная процедура:

  1. Подготовить /etc/resolv.conf со следующей строкой

     nameserver 127.0.0.1
    
  2. Добавьте следующие строки в /etc/dnsmasq.conf

     listen-address=127.0.0.1
     address=/localhost.localdomain/127.0.0.1
     address=/localhost/127.0.0.1
    
  3. Перезапустите 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.