Clone wiki

CMS / Настройка автоподдоменов

Решил автоматизировать получение доступа к новым поддоменам на своих сервере и десктопе, которые оба на Debian. Методом копипаста решить не удалось, так что пришлось разбираться, как всё работает.

В результате мне достаточно создать папку с новым сайтом, как сразу он начинает обрабатываться как поддомен.

Кстати, для сервера сделал обработку поддоменов как все привыкли - auto.modos189.ru, но для десктопа вида auto.lh, где auto - это и есть поддомен. Другими словами, site1.lh, site2.lh, yandex.lh - все эти адреса обрабатываются как локальные сайты.

В этой заметке буду приводить пример для обычных поддоменов, но чтобы было как на моём десктопе, достаточно сменить все modos189.ru на lh


Устанавливаем bind9, т.к /etc/hosts не позволяет использовать регулярные выражения и пришлось бы каждый поддомен вписывать вручную:

$ apt install bind9

Настраиваем перенаправление на наши поддомены. Дописываем в файл /etc/bind/named.conf.default-zones

zone "modos189.ru" {
        type master;
        file "/etc/bind/db.lh";
};

modos189.ru - наш домен

master - тип зоны (в нашем примере master)

/etc/bind/db.lh - файл зоны (далее его содержание)


И создаём /etc/bind/db.lh

$TTL 1d
@ IN SOA ns.modos189.ru. webmaster.modos189.ru. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.modos189.ru.
@ IN A 127.0.0.1
* IN A 127.0.0.1
ns IN A 127.0.0.1

$TTL 1d - На сколько кэшировать ДНС

webmaster.modos189.ru. - электропочта ответственного за сервер ("@" заменяем на ".")


Теперь нужно сделать, чтобы все запросы шли сперва через наш только что настроенный DNS сервер. Устанавливаем resolvconf, чтобы управлять содержимым resolv.conf и тот не перезаписывался вашим менеждером сети.

$ apt install resolvconf

Теперь в файл /etc/resolvconf/resolv.conf.d/head, который является шапкой будущего /etc/resolv.conf, в конец файла добавляем:

nameserver 127.0.0.1

И перезапускаем resolvconf и bind9:

$ service resolvconf restart
$ service bind9 restart

Всё, DNS сервер настроен. Осталось настроить Apache2. Заменяем всё что в /etc/apache2/sites-available/000-default.conf на следующий конфиг:

<VirtualHost *:80>
        ServerName modos189.ru
        ServerAlias *.modos189.ru
        VirtualDocumentRoot /home/user/sites/%-3
        LogLevel warn
        ErrorLog /home/user/error.log

        <Directory />
                AllowOverride none
                Require all denied
      </Directory>

        <Directory "/home/user/sites/">
                Order allow,deny
                Allow from all
                Require all granted
                Options All
                AllowOverride All
        </Directory>
</VirtualHost>

Теперь необходимо в папке /home/user/sites/ создать папки с названием поддомена. Основной сайт, то есть который откроется без указания поддомена, необходимо расположить в папке “_” (без кавычек). Кроме того, если вы настраивали домены вида auto.lh, необходимо заменить %-3 на %-2.

Включаем виртуальные хосты:

$ a2enmod vhost_alias

И перезапускаем Apache2:

$ service apache2 restart

После этого всё должно сразу заработать. Если нет, ищите проблему в логах ошибок.

Кстати, после настройки авто поддоменов самое время попробовать новые движки, например, движок Atom-M CMS который вам очень понравится ;) .

На этом всё, и всем привет.

Updated