LAMP в Ubuntu: виртуальные хосты.

В завершающей статье из цикла LAMP я расскажу о виртуальных хостах. Мы свяжем выбранное доменное имя с директорией, в которой хранится отдельный сайт. Кроме того, мы зададим отдельные файлы логов для этого хоста.

Цикл статей о LAMP:

  1. LAMP в Ubuntu: базовая установка и настройка компонентов веб-сервера.
  2. LAMP в Ubuntu: apache2.conf и .htaccess
  3. LAMP в Ubuntu: виртуальные хосты.

Подготовка директорий для виртуальных хостов.

Apache способен одновременно обслуживать столько сайтов, сколько необходимо, лишь бы ресурсов сервера было достаточно. Эту возможность используют:
  • shared-хостинги (самая доступная разновидность хостингов);
  • владельцы нескольких сайтов, размещающие их на одном виртуальном или физическом сервере;
  • разработчики, работающие локально с несколькими проектами.

Для начала создадим в коревой директории сервера папку для нашего нового сайта:
sudo mkdir /var/www/html/site.com/public_html
В качестве примера я выбрал site.com. Вы можете заменить его на доменное имя своего сайта или любое другое имя, если доступ извне не требуется. Директория public_html не обязательна, контент сайта можно хранить и уровнем выше, но такая структура позволяет размещать в папке проекта данные, которые не должны быть доступны пользователям — логи, например.

Для удобства передадим права на корневую директорию своему пользователю:

sudo chown -R имя_пользователя /var/www/html

Далее помещаем файлы сайта в ранее созданную папку public_html.

Настраиваем виртуальные хосты.

Теперь нужно создать конфигурационный файл для нашего хоста. Он имеет тот же синтаксис, что и apache2.conf и .htaccess, о которых я рассказывал в прошлой статье. Один такой файл уже находится в директории /etc/apache2/sites-available с названием 000-default.conf. Просто скопируем его сюда же, назначив ему в качестве названия имя нашего хоста и прибавим .conf в конце:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/site.com.conf

Откроем созданный нами файл:

sudo gedit /etc/apache2/sites-available/site.com.conf

Здесь нам нужно определить имя виртуального хоста и его корневую директорию:

ServerName site.com
DocumentRoot /var/www/html/site.com/public_html

При желании можно указать e-mail администратора (ServerAdmin), дополнительные имена, по которым будет доступен сайт (ServerAlias), а также добавить свои директивы. Полный список и описания есть в документации Apache.

Если у вас нет зарегистрированного доменного имени или оно не привязано к ip сервера, свяжем их на локальном уровне. Для этого откроем файл /etc/hosts и добавим туда следующее:

127.0.0.1 site.com

Теперь, набрав в адресной строке браузера site.com, мы будем перенаправлены на 127.0.0.1, то есть, на свой же компьютер.

Если сайт находится на удаленном сервере, а не на домашнем компьютере, вместо 127.0.0.1 нужно будет вписать ip сервера. Но даже в этом случае файл hosts нужно править на локальной машине, а не на удаленной.

Остались последние штрихи. Нужно включить виртуальный хост и перезапустить apache:

sudo a2ensite site.com.conf
sudo systemctl restart apache2

После этого по адресу site.com будут доступны файлы, лежащие в

/var/www/html/site.com/public_html.

Для создания еще одного виртуального хоста повторите процедуру.

Отдельные логи для виртуальных хостов.

Для удобства мы можем настроить запись логов каждого виртуального хоста в свой отдельный файл. Укажем расположение лога ошибок Apache, установив в конфиге хоста (в нашем случае это /etc/apache2/sites-available/site.com.conf) соответствующую директиву:

ErrorLog /var/www/html/site.com/logs/apache_err.log

Тут же определяем и общий лог хоста:

CustomLog /var/www/html/site.com/logs/apache_custom.log common

Дополнительный параметр common после имени файла определяет формат лога, но я не буду останавливаться на этом вопросе.
Поскольку мы еще не успели создать директорию, в которой планируем хранить логи, сделаем это сейчас:
mkdir /var/www/html/site.com/logs

Пришло время перезапустить сервер и проверить содержимое папки с логами:

ls /var/www/html/site.com/logs

Вот что получилось в моем случае:

А вот содержимое apache_custom.log после того, как я открыл в браузере site.com:

Эта запись говорит о том, кто, когда, откуда и каким образом получал доступ к сайту. Кстати, для отслеживания статистики посещений совсем не обязательно читать сырые логи. Существуют разнообразные системы, обрабатывающие эти записи и представляющие статистику в удобной и наглядной форме.
P.S.
Так как просмотров статей из данной серии было очень мало, больше материала про LAMP в ближайшее время не предвидится.