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 в ближайшее время не предвидится. 
  • Olmer

    Жаль, что не будет больше статей про LAMP. Было интересно.

    • Edward Kobylyanets

      К сожалению, просмотров и комментариев было очень мало. Следовательно материал мало кому интересен. Будет про что-нибудь другое обязательно. А базовые вещи были в этих трех статьях рассказаны :).

      • https://plus.google.com/118166993767960656676 Did Mazay

        Возможно LAMP мало популярен, т.к. больше людей исмользуют Node.js.

        • Ambit

          LAMP среди новичков мало популярен так как есть OpenServer под Windows, который настраивается в 3 клика и всё делает за тебя — и все новички используют его — а переходят на ЛАМП когда уже возникает вопрос собственного сервера, гибкости настроек и т.д.. А материал найдет своих читателей — т.к. как не крути Линукс рулит

  • Олег

    Раскажите чем логи читать, т.к. просто просматривать 30000 строк лога за 1 день напряжно, особенно если ищешь косвенные признаки попытки взлома, бутфорса или заражения.

  • Ambit

    автору спасибо! статьи хорошие ! продолжай делать — рано ты количество просмотров начал считать — еще наберется аудитория

  • http://vk.com/id297639916 Алексей Громов

    Хорошо излагаешь) Даже жаль, что ничего больше не будет 🙁