Мультидоменность в Apache без лишних хлопот

Администрирование > Разное
Интернет пестрит руководствами по настройке виртуальных хостов в Apache. Но, в большинстве случаев, создание такого поддомена представляется хлопотным делом.По «стандартной» инструкции предлагается сделать следующее:
  1. Создать папку для сайта
  2. Создать конфигурационный файл с именем будущего домена
  3. Включить сайт специальной опцией
  4. Перезагрузить Apache
  5. Прописать наш домен в файле hosts

Некоторые пытаются оптимизировать данный процесс различными скриптами, но проблемы это, по сути, не решает.
Итак, попробуем добиться, чтобы процесс создания поддомена сводился лишь к созданию папки для сайта. Возможно ли это? Проверим...
Как устанавливать LAMP я рассказывать не буду, так как вы, скорее всего, можете сделать это с закрытыми глазами (смайл). Перейдем к самому интересному.

Настройка vhost_alias
Включаем модуль vhost_alias. Он то и будет главным действующим лицом.
sudo a2enmod vhost_alias

Включаем, если нужно, mod_rewrite.
sudo a2enmod rewrite

Открываем файл httpd.conf и приступаем к непосредственной настройке.

    #Подставляем имя сервера из заголовка запроса пользователя
    UseCanonicalName Off
    # Формируем логи так, чтобы в них указывалось имя виртуального хоста
    LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
    CustomLog /home/%username%/web/access_log vcommon
    # Нужно для работы mod_rewrite
   
        Options FollowSymLinks
        AllowOverride All
   
    # Собственно правило, по которому будет искаться нужный нам сайт
    VirtualDocumentRoot /home/%username%/web/%-2 
 
%-2 означает, что по хост будет выбран по предпоследней части доменного имени. Другими словами, создав директорию /home/%username%/web/habrahabr, мы сможем обратиться к ней как habrahabr.ru (или habrahabr.com, или даже habrahabr.xxx).
Можно также задать свои параметры выбора имени хоста:
  • %0 Полное имя
  • %1 Первая часть имени
  • %2 Вторая часть имени
  • %3 Третья часть имени
  • %-1 Последняя часть
  • %-2 Предпоследняя часть
  • %2+ Вторая и все последующие части
  • %-2+ Предпоследняя и все последующие части

Рестартуем Apache.
sudo service apache2 restart

Наш сервер уже работает. Убедиться в этом мы можем, создав папку с нужным именем, например test и поместив туда index.php с каким-нибудь содержимым, например "".
Ах да, нужно ведь еще прописать наш домен в файлике /etc/hosts.
127.0.0.1 test.loc

Все, теперь можно открывать в браузере страничку.
Стоп, мы так не договаривались! Создание сайта должно сводиться к созданию директории под него. Ну что ж, давайте сделаем…

Настройка DNS-сервера
Для этого мы будем использовать DNS-сервер bind9. Все домены с суффиксом *.loc будут смотреть на нашу локальную машину.
Устанавливаем DNS-сервер
sudo apt-get install bind9

Открываем конфигурационный файл named.conf.options и добавляем

acl "home" {192.168.1.0/24; 127.0.0.1;};
    options {
        directory "/var/cache/bind";
        auth-nxdomain no;
        listen-on-v6 { none; };
        listen-on { 127.0.0.1; };
        allow-transfer { none; };
        allow-query {"home";};
        forward first;
        # Указываем DNS-адреса провайдера
        forwarders {
            192.168.1.2;
            8.8.8.8;
        };
    }; 

Создаем файлы для прямой и обратной доменной зоны.
cd /etc/bind/
sudo touch db.loc db.loc.rev

Содержание db.loc

$TTL 86400
    $ORIGIN loc.
    @ IN SOA skywrtr.loc. admin.skywrtr.loc. (
        2010050100; Serial
        14400; Refresh
        7200; Retry
        3600000; Expire
        86400 ); Minimum
    @ IN NS localhost.
    * IN A 127.0.0.1 

Содержание db.loc.rev

$TTL 86400
    $ORIGIN loc.
    @ IN SOA skywrtr.loc. admin.skywrtr.loc. (
        2010050100; Serial
        14400; Refresh
        7200; Retry
        3600000; Expire
        86400 ); Minimum
    @ IN NS localhost.
    * IN A 127.0.0.1 

Наконец, открываем файл named.conf.local и дописываем туда

one "loc" {
        type master;
        file "/etc/bind/db.loc";
        allow-transfer { 127.0.0.1; };
        notify no;
    };
    zone "0.0.127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.loc.rev";
        allow-transfer { 127.0.0.1; };
        notify no;
    }; 

Остальсь подключиться к нашему DNS-серверу. Либо через файл /etc/resolv.conf, дописав строчку
nameserver 127.0.0.1

либо через стандартный менеджер сетевых соединений. В свойствах подключения, на вкладке «Параметры IPv4» дописать адрес 127.0.0.1 в поле «Серверы DNS».



Некоторые замечания
Есть пара замечаний по работе с vhost_alias.
  • Неправильные данные дает переменная $_SERVER['DOCUMENT_ROOT'], поэтому приходится использовать либо dirname(__FILE__), либо realpath(). Смотря что нужно.
  • Если перестал работать mod_rewrite, не паникуем. В файле .htaccess после строчки
    RewriteEngine on

    Вставляем
    RewriteBase /

Источник: http://habrahabr.ru/blogs/linux/129900/

Комментарии
]]> ipv6 ready Kiev LUGLinux4MeНостальгияЛичный сайт skeletora ]]>