Динамическое создание поддоменов

Динамическое создание поддоменовДинамическое создание поддоменов может быть полезно в тех случаях, когда, например, для каждого пользователя нужно создать отдельную страничку, доступную по определенному адресу как домен третьего уровня в таком виде: «http://username.domain.com». Такой механизм также можно использовать для хостинга, когда пользователь после регистрации получает место на диске под сайт и домен третьего уровня. Давайте посмотрим, как можно реализовать такое разделение на уровне DNS и на уровне веб-сервера.

Настройка DNS

Для создания доменов третьего уровня мы можем использовать возможность указания маски для записей DNS. Для этого в первую очередь добавим зону в файл со списком зон. Для Debian’а это файл /etc/bind/named.conf.local. Вот как это выглядит:

zone "mydomain.org" {
    type master;
    file "/etc/bind/mydomain.org";
    allow-transfer {none;};
};

Затем создадим файл зоны /etc/bind/mydomain.org следующего содержания:

$TTL 86400
mydomain.org. IN SOA mydomain. root.mydomain. (
    1        ; Serial
    604800   ; Refresh
    86400    ; Retry
    2419200  ; Expire
    86400 )  ; Negative Cache TTL
;
mydomain.org.  IN    NS    ns1.mydomain.org.
mydomain.org.  IN    MX    10 mail
mydomain.org.  IN    A     192.168.0.11
ns1            IN    A     192.168.0.11
*              IN    A     192.168.0.11

После этого можно рестартовать bind командой «service bind9 restart» и проверить, правильно ли работает эта запись.

$ nslookup mydomain.org 192.168.0.11
Server:         192.168.0.11
Address:        192.168.0.11#53

Name:   mydomain.org
Address: 192.168.0.1

В данном примере 192.168.0.11 — это адрес нашего DNS-сервера. Как видим, сам домен резолвится. Теперь надо проверить какой-нибудь субдомен/поддомен. Проверим поддомен «user.mydomain.org»:

$ nslookup user.mydomain.org 192.168.0.11
Server:         192.168.0.11
Address:        192.168.0.11#53

Name:   user.mydomain.org
Address: 192.168.0.11

Если посмотреть на файл зоны, то видно, что такой поддомен мы не задавали. Но домен третьего уровня резолвится, и так будет с любым доменом третьего уровня для домена mydomain.org.

Можно на этом считать настройку DNS оконченной. Теперь надо настроить веб-сервер таким образом. чтобы он при обращении на некоторый субдомен открывал сайт из соответствующей директории. Например, из /home/<домен-третьего-уровня>/html

Настройка веб-сервера nginx

Для веб-сервера nginx нам достаточно будет указать в конфигурационном файле название именно того домена третьего уровня, на котором предполагается размещение сайта.

Создаем файл /etc/nginx/sites-available/user следующего содержания:

server {
    listen 80;
    server_name user.mydomain.org;
    root /home/user/html;
    index index.html;
    access_log /home/user/logs/access.log;
    error_log /home/user/logs/error.log;
}

Это, как вы понимаете, самый простой вариант. Обычно в файл конфигурации добавляются также другие параметры. Теперь надо создать символическую ссылку:

ln -s /etc/nginx/sites-available/user /etc/nginx/sites-enabled

Осталось перезагрузить настройки nginx и проверить, работает ли свежесозданный сайт на домене третьего уровня.

service nginx reload

Вы должны увидеть такое сообщение:

Reloading nginx configuration: nginx.

Иногда требуется выполнить «service nginx restart». Теперь можно открывать сайт в браузере или проверить его доступность программой wget или curl

$ curl http://user.mydomain.org
user's homepage at http://user.mydomain.org

Это содержимое файла index.html, находящегося в директории /home/user/html. При этом должны появиться записи в файлах /home/user/logs/access.log и /home/user/logs/error.log

Генерацию необходимых файлов при создании пользователя вам, скорее всего, потребуется автоматизировать, как и доступ для загрузки файлов по FTP, но это достаточно просто. Самое главное для динамического создания доменов третьего уровня вы уже знаете, а остальное — дело техники.

[wysija_form id=»2″]