Динамическое создание поддоменов может быть полезно в тех случаях, когда, например, для каждого пользователя нужно создать отдельную страничку, доступную по определенному адресу как домен третьего уровня в таком виде: «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″]