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

12 Апр
2010

И так встала передо мной задача, наделать кучу поддоменов точнее доменов третьего уровня, причем создаваться и удалятся они должны были программно. Как и всегда в подобных случаях, когда сделать нужно и как незнамо, начал искать в инете. Не могу сказать что много чего нарыл, информация есть, но не много, в добавок при полевых испытаниях не один из найденных мной методов не заработал, пришлось изобретать свой, который сейчас и опишу. Так как я являюсь счастливым обладателем ВДС от ферсвдс.ру, то естественно исходил из того факта что доступ к нужным мне конфигам у меня есть.

итог того что мне было нужно это некая папочка, где я создаю еще одну папочку имя которой и будет являться именем поддомена, например корневой каталог поддоменов — subdomans, создаю в нем директорию — newsubdomen, и получаю рабочий адрес вида http://newsubdomen.mydomen.ru.

Задача поставлена, приступаем.

Для ясности введем обозначения:
основной домен имеет имя mydomen.ru
имя пользователя которому принадлежит домен в панели admin
ip адрес -  xxx.xxx.xxx.xxx
порт сервера — pp

Первым делом идем в настройки зоны нужного нам домена, распологается нужный файл по адресу:
/var/named/etc/namedb/master/
Ищем файл mydomen.ru открываем его и видим что то вроже этого:

$TTL    3600
mydomen.ru.    IN    SOA    ns1.firstvds.ru.login.servername.ru (2010021700 10800 3600 604800 86400)
mydomen.ru.    IN    NS     ns1.firstvds.ru.
mydomen.ru.    IN    NS     ns2.firstvds.ru.
mydomen.ru.    IN    MX    10 mail
mydomen.ru.    IN    MX    20 mail
mydomen.ru.    IN    A     xxx.xxx.xxx.xxx
www    IN    A     xxx.xxx.xxx.xxx
ftp    IN    A     xxx.xxx.xxx.xxx
mail    IN    A     xxx.xxx.xxx.xxx
smtp    IN    A     xxx.xxx.xxx.xxx
pop    IN    A     xxx.xxx.xxx.xxx
mydomen.ru.    IN    TXT     “v=spf1 ip4:xxx.xxx.xxx.xxx a mx ~all”

Добавляем сюда строчку — *    IN    A     xxx.xxx.xxx.xxx, получается:

$TTL    3600
mydomen.ru.    IN    SOA    ns1.firstvds.ru.login.servername.ru (2010021700 10800 3600 604800 86400)
mydomen.ru.    IN    NS     ns1.firstvds.ru.
mydomen.ru.    IN    NS     ns2.firstvds.ru.
mydomen.ru.    IN    MX    10 mail
mydomen.ru.    IN    MX    20 mail
mydomen.ru.    IN    A     xxx.xxx.xxx.xxx
www    IN    A     xxx.xxx.xxx.xxx
ftp    IN    A     xxx.xxx.xxx.xxx
mail    IN    A     xxx.xxx.xxx.xxx
smtp    IN    A     xxx.xxx.xxx.xxx
pop    IN    A     xxx.xxx.xxx.xxx
*    IN    A     xxx.xxx.xxx.xxx
mydomen.ru.    IN    TXT     “v=spf1 ip4:xxx.xxx.xxx.xxx a mx ~all”

сохраняем изменения.

Теперь редактируем файл httpd.conf, т.е. конфиг апача, ищем его по адресу: /usr/local/etc/apache22/httpd.conf, открываем его ищем там нужную нам запись описывающую настройку VirtualHost нашего домена. Скорее всего запись будет выглядеть приблизительно так:


ServerName mydomen.ru
DocumentRoot /home/admin/data/www/mydomen.ru
AssignUserID admin admin
CustomLog /home/httpd-logs/mydomen.ru.access.log combined
ErrorLog /home/httpd-logs/mydomen.ru.error.log
ServerAlias www.mydomen.ru
ServerAdmin webmaster@mydomen.ru
php_admin_value open_basedir “/home/admin/data:.“
php_admin_value sendmail_path “/usr/sbin/sendmail –t –i –f webmaster@mydomen.ru“
php_admin_value upload_tmp_dir “/home/admin/data/mod-tmp“
php_admin_value session.save_path “/home/admin/data/mod-tmp“
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps

Ниже строки ServerAlias www.mydomen.ru вставляем строчку ServerAlias *.mydomen.ru, получается:


ServerName mydomen.ru
DocumentRoot /home/admin/data/www/mydomen.ru
AssignUserID admin admin
CustomLog /home/httpd-logs/mydomen.ru.access.log combined
ErrorLog /home/httpd-logs/mydomen.ru.error.log
ServerAlias www.mydomen.ru
ServerAlias *.mydomen.ru
ServerAdmin webmaster@mydomen.ru
php_admin_value open_basedir “/home/admin/data:.“
php_admin_value sendmail_path “/usr/sbin/sendmail –t –i –f webmaster@mydomen.ru“
php_admin_value upload_tmp_dir “/home/admin/data/mod-tmp“
php_admin_value session.save_path “/home/admin/data/mod-tmp“
AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml
AddType application/x-httpd-php-source .phps

Сохраняем изменения, перезагружаем ВДС. Если он не загрузился пишем в саппорт, где то что то не так написали :) , расскажите какие файлы редактировали, ребята из саппорта поправят.

Собсвенно почти уже все настроили, последний штрих это написание правил перенаправления в .htaccess. Идем в папку в которой лежит домен, открываем для редактирования файл .htaccess, или создаем его если такого нету, и пишем туда:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.mydomen.ru
RewriteRule (.*) http://mydomen.ru/$1 [R=301,L]

RewriteBase /
RewriteCond %{HTTP_HOST} !^mydomen\.ru$
RewriteCond %{HTTP_HOST} (www\.)?(.*)\.mydomen\.ru$
RewriteCond %{REQUEST_URI} !^(/)?subdomans/
RewriteRule ^(.*)$ subdomans/%2/$1

ErrorDocument 404 http://mydomen.ru

Если файл уже такой есть, и он не пустой, то все это добавляем в начало файла. Объясню что же тут написано.
Первые три строки перенаправляют запросы вида www.mydomen.ru на адрес mydomen.ru, сделать это нужно т.к. поисковики любят такое перенаправление, без него они будут считать что домены www.mydomen.ru и mydomen.ru это два разных сайта.
Следующие пять строк, отвечают как раз за работу наших поддоменов, сначала проверяется уровень запрашиваемого домена, если он не второго уровня, то сервер перенаправляет этот запрос в папку по адресу — subdomans/имя_запрашиваемого_поддомена.
И последняя строчка говорит серверу что в случае, если запрашиваемый документ не найден, нужно вывести главную страницу сайта.
Вот собсвенно и все. Средствами пхп создаем папочку в директории subdomans, и радуемся результату.

P.S. Все выше написанное успешно применяется мной на практике, что отнюдь не значит у вас получится сделать все тоже самое без побочных эффектов. Редактируйте файлы настроек очень внимательно, лишний символ не там где нужно и сервер перестанет работать.

слов — 629, знаков: с пробелами — 5925, без пробелов — 5297
google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
Читайте так же:

Комментировать

Вы должны войти чтобы комментировать.


Наверх