Как создать поддомен на сервере apache?

Есть сервер, допустим, test.com
Там запущен Apache и пр., в /sites-avaliable/default прописано
ServerName test.com
DocumentRoot /var/www/site/


Хочется, чтобы по адресу test.test.com открывался /var/www/test/, а по всем остальным *.test.com по прежнему - /var/www/test/

Просто добавление еще одного виртуального хоста с содержимым
<VirtualHost *:80>
        ServerName test.test.com
        DocumentRoot /var/www/test
</VirtualHost>

не помогло.

Собственно, вопрос: что делать?

//Вывод команд, которые просили в комментариях
cat /etc/apache2/sites-available/default
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName www.test.com

        DocumentRoot /var/www/site/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
$ cat /etc/apache2/sites-available/test   
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName test.test.com

        DocumentRoot /var/www/test/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride All
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
$ host www.test.com
www.test.com has address XX.247.172.108
$ host test.test.com
test.test.com has address XX.247.172.108
  • Вопрос задан
  • 26212 просмотров
Пригласить эксперта
Ответы на вопрос 2
merryjane
@merryjane
Системный администратор
apachectl -S что показывает?
Ответ написан
@hodakovskiy
Настройка Linux*
Интернет пестрит руководствами по настройке виртуальных хостов в Apache. Но, в большинстве случаев, создание такого поддомена представляется хлопотным делом.
По «стандартной» инструкции предлагается сделать следующее:
Создать папку для сайта
Создать конфигурационный файл с именем будущего домена
Включить сайт специальной опцией
Перезагрузить Apache
Прописать наш домен в файле 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 с каким-нибудь содержимым, например "<?php phpinfo(); ?>".
Ах да, нужно ведь еще прописать наш домен в файлике /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
$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 и дописываем туда
zone "loc" {
type master;
file "/etc/bind/db.loc";
allow-transfer { 127.0.0.1; };
notify no;
};

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

Войдите, чтобы написать ответ

Похожие вопросы