Автоматическое создание субдоменов в 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/.
Вот и всё.
koss
29.01.2011 - 19:38
Хорошая штука, пригодится.
— это необязательныйпримера директив для тких ?
Добавлю, что основной домен из одного слова — очень важно, т.к. позволяет поддерживать сайты
koss
29.01.2011 - 19:58
Черт, отравилось раньше срока (
В примере /home/petka/apache/ надо на./www поменять — как в DocumentRoot
koss
29.01.2011 - 20:08
Хорошая и очень удобная штука, пригодится.
Отмечу отдельно, т.к. в статье на этом внимание не заостряется: иметь основной локальный домен из одного слова для таких конфигураций — очень хорошая практика, т.к. это легко позволяет иметь на локальных сайтах урлы вида domain.tld, а не subdomain.domain.tld Тогда мы будем на локальных сайтах видеть урлы такими же, какими они будут и на продакшне (разница будет лишь в домене верхнего уровня — .xyz вместо .com (.net, .info и т.п.)
Петька Сокольников
31.01.2011 - 09:41
@koss
Конечно, директивы только для примера.
admin
03.03.2012 - 21:09
@koss
Да, правильно, хотел адаптировать для общего просмотра, не все пути поправил 🙂
anton
28.11.2012 - 01:18
Подскажите плиз как автоматически добавлять домены 2уровня создав токо папку в www
для Дебиана….легко ли там?
admin
14.12.2012 - 21:27
Отличаться должен только процесс установки нужных пакетов в систему. Настройки апача должны быть схожими.
ildar r. khasanshin
16.11.2018 - 00:45
сделал себе такую автоматизацию
https://10021987.ru/lamp-ubuntu-17-10/
можете модифицировать под себя