Posts tagged as:

zone

named.conf с чем и как его едят, или настроим ДНС сами

by skid on Февраль 20, 2008

Чтобы полностью раскрыть тему с вайлдакрадами, я решил дать пару примеров создания днс зоны и виртуального хоста. Все нижеописанное нужно если на вашем сервере не стоит панель управления.
Итак приступим.

1. Начнем с добавления днс зоны domen.ru. Для этого открываем фаил named.conf (путь по умолчанию /etc/named.conf) и добавляем в конец:
zone “domen.ru” { type master; file “/etc/namedb/domen.ru.db”; };
теперь создаем фаил domen.ru.db ( и папку /etc/namedb если ее нет) следующего содержания:
[code='css']$TTL 14400
@ IN SOA ns1.domen.ru. root.domen.ru. (
2008020900
7200
3600
1209600
86400 )
domen.ru. 14400 IN NS ns1.domen.ru.
domen.ru. 14400 IN NS ns1.domen.ru.
domen.ru. 14400 IN A 192.168.0.1
ns2 14400 IN A 192.168.0.2
* 14400 IN A 192.168.0.1
domen.ru. 14400 IN MX 10 mail
domen.ru. 14400 IN TXT “v=spf1 a mx ip4:192.168.0.1 ?all”[/code]
Таким образом у нас появляется зона удовлетворяющая большинству потрдебностей. Теперь немного пройдемся по тому что у нас вышло:
Наша зона будет обновляться каждые четыре часа. В качестве днс серверов мы используем внутренние имена ns1.domen.ru и ns2.domen.ru которые ведут на наш сервер по адресам 192.168.0.1 и 192.168.0.2 соответсвенно.

2. Теперь переходим к созданию vhost-а. Открываем фаил httpd.conf (который чаще всего расположен в /etc/httpd/conf/httpd.conf) и в конце добавляем:
[code='css']
ServerName domen.ru
ServerAlias *.domen.ru
DocumentRoot /home/sites/domen.ru
[/code]

Здесь пояснения надеюсь не нужны. В случае вопросов обращайтесь в комментарии или пишите на skid собачка linux.md

{ 4 comments }

Автосабдомены в строю или вайлдкарды в действии

by skid on Февраль 20, 2008

Порой возникает необходимость создания нескольких сотен поддоменов. Очевидно что создание их вручную займет не мало времени. Но есть способ сделать все намного проще :)
Итак приступим.

Для того чтобы все заработало нам нужно будет три вещи:

  • настроить зону в named-е
  • настроить вхост в apach-е
  • сделать правило через mod_rewrite

1. Первым делом нам нужно добавить “A” запись в фаил зоны:
* 14400 IN A 192.168.0.1
Где * будет означать, что запись будет резолвить абсолютно любой поддомен, 14400 время обновления зоны и 192.168.0.1, это ip адрес куда будут направленны поддомены.

Note: Стоит учитывать что named обрабатывает записи последовательно и любая запись добавленная после * не будет обработана.

2. Теперь переходим к конфигурировании веб сервера. Тут все проще, достаточно добавить директиву ServerAlias и все будет работать.
[code lang='css']
ServerAlias *.domen.ru
[/code]
Где * будет означать что вхост обрабатывает все поддомены и все они будут направлены в один и тот же DocumentRoot, а domen.ru это наш домен.

Note: Апач так же как и named читает конфигурационный фаил последовательно, поэтому любой поддомен добавленный ниже не будет обработан сервером.

3. Нам осталось создать правила mod_rewrite чтобы поддомен был направлен в папку домена. Создаем .htaccess следующего содержания:
[code lang='css']
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^(www\.)?domen\.ru$ [NC]
RewriteCond %{HTTP_HOST}—%{REQUEST_URI} ^([^\.]+)\.domen\.ru—/([^/]+)? [NC]
RewriteCond %1—%2 !^(.*)—\1$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1/ -d
RewriteRule ^(.*)?$ %1/$1 [QSA,PT]
[/code]
Теперь любая папка например http://domen.ru/papka1/ будет доступна по адресу http://papka1.domen.ru/
Но такой вариант не всегда приемлем, и иногда нужно чтобы поддомены находились в вложенной папке скажем в http://domen.ru/sub/papka1/. Для этого делаем другой .htaccess:
[code lang='css']
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.domen\.ru$ [NC]
RewriteCond %{HTTP_HOST} !^www\.domen\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/sub
RewriteRule ^(.*) %{HTTP_HOST}$1
RewriteRule ^(.*)\.domen\.ru(.*) /sub/$1$2
RewriteRule ^sub\.(.*) /sub/$1
[/code]
Практически все панели управления позволяют сделать подобные вещи через внутренние интерфейсы, так что проблем быть не должно.

P.S. Цените свое время и не теряя его на рутину.

{ 4 comments }