Автоматическое создание субдоменов в Apache2

Мне приходится работать с движками многих сайтов, постоянно появляются для обслуживания новые, и уходят в архивное забвение старые. Поэтому часто добавляются новые блоки виртуалхостов в конфиге Апача, и сам конфиг уже изрядно раздулся.
Появилась минутка свободного времени, и я решил навести порядок в этом безобразии. Захотелось сделать так, чтобы для добавления нового сайта, было достаточно создать директорию, и прописать новый хост в /etc/hosts, а не повторять каждый раз монотонную операцию добавления и редактирования блоков <VirtualHost>.
По сути теперь у меня есть основной домен, и к нему автоматически добавляются субдомены, по которым и грузятся разные сайты с локальной машины.

Для начала, конечно, необходимо установить сам Апач. (На моём рабочем компьютере стоит Ubuntu 10.10, поэтому весь процесс рассказываю для него).

sudo apt-get install apache2

Далее подключаем mod_rewrite (Он понадобится для автоматического создания субдоменов).

sudo a2enmod rewrite

Эта команда, по сути, создает символическую ссылку в /etc/apache2/mods-enabled/ на /etc/apache2/mods-available/rewrite.load, поэтому сделать это можно и любым другим способом.
Перезагружаем Апач.

sudo /etc/init.d/apache2 restart

Итак, мы имеем установленный Apache2 с mod_rewrite. Теперь надо сконфигурировать его.
Для начала выбираем себе директорию, где будут лежать наши папки с сайтами.
Пускай это будет /www.

Далее открываем /etc/apache2/sites-available/default

sudo mcedit /etc/apache2/sites-available/default

Куда пишем что-то типа:

<VirtualHost *:80>
ServerName xyz
DocumentRoot /www
ServerAlias *.xyz
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.xyz$
RewriteCond %{HTTP_HOST} ^((.*)\.)xyz$
RewriteRule ^/(.*) /%2/$1

<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>

где, xyz — это мой основной домен. Его же и надо прописать в /etc/hosts

127.0.0.1 xyz

Перезагружаем еще раз веб-сервер

sudo /etc/init.d/apache2 restart

и пробуем в любом браузере открыть http://xyz/. У нас должен открыться листинг директории /www.

Теперь, чтобы добавить еще один сайт на наш локальный сервер надо создать в директории /www любую другую директорию, например, /www/site1, дописать домен site1.xyz в /etc/hosts

127.0.0.1 xyz site1.xyz

и теперь в браузере должен загрузиться наш сайт по адресу http://site1.xyz/.

Вот и всё.

Share

Comments

  1. Хорошая штука, пригодится.
    — это необязательныйпримера директив для тких ?
    Добавлю, что основной домен из одного слова — очень важно, т.к. позволяет поддерживать сайты

  2. Черт, отравилось раньше срока (
    В примере /home/petka/apache/ надо на./www поменять — как в DocumentRoot

  3. Хорошая и очень удобная штука, пригодится.
    Отмечу отдельно, т.к. в статье на этом внимание не заостряется: иметь основной локальный домен из одного слова для таких конфигураций — очень хорошая практика, т.к. это легко позволяет иметь на локальных сайтах урлы вида domain.tld, а не subdomain.domain.tld Тогда мы будем на локальных сайтах видеть урлы такими же, какими они будут и на продакшне (разница будет лишь в домене верхнего уровня — .xyz вместо .com (.net, .info и т.п.)

  4. Петька Сокольников
    31.01.2011 - 09:41

    @koss
    Конечно, директивы только для примера.

  5. @koss
    Да, правильно, хотел адаптировать для общего просмотра, не все пути поправил 🙂

  6. Подскажите плиз как автоматически добавлять домены 2уровня создав токо папку в www
    для Дебиана….легко ли там?

    • Отличаться должен только процесс установки нужных пакетов в систему. Настройки апача должны быть схожими.

  7. ildar r. khasanshin
    16.11.2018 - 00:45

    сделал себе такую автоматизацию
    https://10021987.ru/lamp-ubuntu-17-10/
    можете модифицировать под себя

Добавить комментарий

Your email address will not be published / Required fields are marked *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.