all in all front-end back-end linux web-services

Автоматические хосты в локальном веб-сервере

После очередного создания виртуального хоста вручную в Apache2 начал искать решение, чтобы хост вида domain.localhost был доступен простым созданием директории.

Так это работает в Denwer, если мне не изменяет память и очень захотелось такое в Ubuntu. Сначала хотел написать или найти bash-скрипт для создания хостов одной командой, но в итоге нашёл это решение.

Для начала нужно убедиться, что включен модуль mod_vhost_alias. Для распространённых сборок Apache для включения модуля нужно ввести команду:

  1. sudo a2enmod vhost_alias

В других случаях нужно править конфиг /etc/apache2/apache2.conf либо /etc/apache2/httpd.conf или что-то в этом роде. Я привык для редактирования конфигов использовать консольный редактор nano:

  1. sudo nano /etc/apache2/apache2.conf
  2. sudo nano /etc/apache2/httpd.conf

В найдённом конфиге ищите строчку, содержащую mod_vhost_alias (в nano для поиска ctrl+w). Если такой строчки нет, добавьте такую строку:

  1. LoadModule vhost_alias_module modules/mod_vhost_alias.so

Заметьте, что путь к модулю должен соответствовать расположению модулей apache в вашей системе. В разных сборках может быть разный путь, но зачастую это — /etc/apache2/mods-available.

Apache обычно загружает конфиги хостов из папки /etc/apache2/sites-available и опционно из /etc/apache2/sites-enabled. Для включения конфига обычно используется команда вида:

  1. sudo a2ensite mysite.conf

При использовании конфига из примера у меня не читался .htaccess файл, по-этому привожу вариант, на котором эта проблема не проявилась:

  1. <VirtualHost *:80>
  2.     ServerAlias *.localhost
  3.     ErrorLog /home/user/www/error_log
  4.     VirtualDocumentRoot /home/user/www/%1/
  5.     UseCanonicalName Off
  6.     <Directory "/home/user/www">
  7.         Options Indexes FollowSymlinks MultiViews
  8.         AllowOverride All
  9.         Require all granted
  10.     </Directory>
  11. </VirtualHost>

Вместо /home/user/www/ - укажите свой путь. Обычно сайты помещают в /var/www, но мне как-то больше нравится размещать сайты в домашней директории.

Отличия от обычных конфигов в строчках "ServerAlias *.localhost" и "VirtualDocumentRoot /home/user/www/%1/". И ещё добавляется строчка UseCanonicalName Off.

21.12.2015

Комментарии

Переход на Linux

«Подниматель пингвинов»