Найти тему
ProITLive

Linux Apache. Виртуальные хосты

Оглавление

Всех категорически приветствую!

Теперь пробежимся по настройкам Apache. Не по всем, конечно, а по наиболее часто пригождающимся, а именно: создание виртуальных хостов, назначение порта для прослушки и создание защищенных хостов (HTTPS).

Краткий обзор по установке и настройке связки LAMP был в предыдущей статье (почитайте, если сборка LAMP у вас еще не установлена).

Чуть забегая вперед, скажу, что информация о настройке HTTPS, о портах хостов и работа с .htaccess и .htpasswd будут описаны в следующих двух публикациях. Статьи решил сделать отдельными для того, чтобы материал был более легкочитаемым. Иначе, свалка всей информации в одну статью приводит к тому, что ее просто тяжело переваривать из-за большого объема.

Итак, начнем. В этой статье о хостах.

Виртуальные хосты.

Хост – это, так скажем, некий функциональный оконечник. Если очень сильно обобщить, то любой девайс в сети, которому можно назначить IP-адрес, так или иначе можно назвать хостом. Это может быть физический девайс (железный сервер, например) так и виртуальный. Виртуальность, как мы понимаем, это абстракция, которая может трактоваться очень гибко. Виртуальные хосты, в нашем случае, будет обслуживать программный сервер Apache, позволяющий создать несколько программных (виртуальных) web-серверов и умеющий перенаправить на них пользовательские запросы.

Почему их называют виртуальными? Потому что физический хост (сервер) у нас всего один, как и один IP-адрес (в моем случае). Но сайтов на этом сервере мы хотим держать, к примеру, два или три. Не ставить же два или три железных сервера). Поэтому придумали программные серверы, умеющие эмулировать работу физических, т.е. – виртуальные.

Например:

  • у нас имеется один физический сервер, на котором стоит Apache и есть один фиксированный IP-адрес, условно, 192.168.44.201, назначенный этому серверу. Так же у нас имеется 2 доменных имени – www.test-site1.ru и www.test-site2.ru;
  • в доменных записях типа «A» у нас оба этих имени привязаны к IP-адресу 192.168.44.201, т.е. при вводе в браузере любого из двух, выше приведенных, доменных имен, мы будем отправлены на IP-адрес 192.168.44.201. И вот тут вступает в работу Apache, задача которого по доменному имени понять, на какой именно сайт мы хотим попасть;
  • если настройка виртуальных хостов не была произведена, то при обращении к любому из двух сайтов мы будем всегда попадать на дефолтную страницу или на первый сайт, имеющийся в Apache.

Вот общая схема, отражающая суть работы виртуальных хостов Apache:

-2

Настройка Apache для работы с виртуальными хостами сводится к трем шагам:

1) создание корневой директории для размещения сайта и настройка прав доступа;

2) настройка конфигурации виртуального хоста (на каждый хост отдельный конфиг);

3) активация хоста в Apache (и рестарт Apache).

1) Создание корневой директории для сайта

Логично, что для каждого сайта крайне желательно иметь отдельную директорию. Этакую квартиру в большом доме. Согласитесь, что поселить несколько семей в одной здоровой комнате без личного пространства – идея очень глупая и приведет к постоянной ругани хозяек на одной кухне и к хаосу. Так же иногда в субдиректории сайта админы селят, например, тематические форумы (а форум чаще всего – это отдельный сайт), так или иначе относящиеся к сайту. Это сродни тому, что вы подселили к себе в квартиру тёщу. До определенного момента на одной кухне с дочерью они будут находить консенсус, но только до определенного момента… Не приветствую такой поход и вам не советую. Так же и с сайтами. Поэтому создадим для наших тестовых сайтов две директории.

Я использую классическое расположение общедоступных директорий Apache – «/var/www/html» и плясать буду именно отсюда.

  • директория для www.test-site1.ru - /var/www/html/tsite1ru
  • директория для www.test-site2.ru - /var/www/html/tsite2ru
Директории для сайтов
Директории для сайтов
Старайтесь называть директории (а в дальнейшем, конфиги логи и т.п.), относящиеся к сайту, предельно лаконично, иначе будет «ёёё-маёё…»

Для дальнейшей проверки разместим в этих директориях по одному файлику «index.html» с таким содержанием:

<html>
<center>
Site 1 (Site 2 для второго)
</center>
</html>
-4
-5
(файлики из консоли создаются командой «touch имя_файла.html»)

Определим созданным папкам и файлам права доступа.

#> chown -R www-data:www-data /var/www/html/tsite1ru
#> chown -R www-data:www-data /var/www/html/tsite2ru
#> chmod -R 755 /var/www/html/tsite1ru
#> chmod -R 755 /var/www/html/tsite2ru

(файлы и директории приписали пользователю и к группе www-data – это пользователь и группа, от имени которых по умолчанию работает Apache, если вы не меняли конфигурацию. Так же определили права доступа к директориям и файлам – 755 = владелец – rwx; группа – r-x; все остальные – r-x)

Вообще, тема прав доступа отдельная и весьма обширная. Для каждых случаев права настраиваются индивидуально под конкретные цели и задачи. Я их подробно обсуждать не буду.

Почитать о правах доступа в Linux можно ТУТ

Или на хелп убунту ТУТ

2) С директориями закончили. Теперь второй пункт – настройка конфигурации виртуальных хостов.

Как я уже говорил, для каждого хоста в Apache создается отдельный конфигурационный файл. Эти файлы хранятся в директории «/etc/apache2/sites-available».

В свежеустановленном Apache имеется два дефолтных конфига – для http (000-default.conf) и для https (default-ssl.conf). В них содержится минимальный набор настроек. В принципе, можно эти конфиги скопировать, дополнить своими пунктами и использовать в своих целях. Я же приведу готовый вариант своих рабочих конфигов. Дабы не загромождать статью кодом, ниже прямые ссылки на файлы с моего сайта (без вирусов, естественно).

tsite1ru.conf

tsite2ru.conf

Расположение файлов выглядит так:

-6

В наших конфигах (они аналогичны друг, отличаются только цифрой 1 и 2 соответственно) пока интересны только следующие строки:

Указываем имя сервера, алиасы хоста и корневую директорию.
Указываем имя сервера, алиасы хоста и корневую директорию.
Указываем директорию, в данном случае, корневую, к которой будет применяться набор определенных правил (.htaccess в дальнейшем)
Указываем директорию, в данном случае, корневую, к которой будет применяться набор определенных правил (.htaccess в дальнейшем)
Указываем имя лога, который будет вести Apache для этого хоста
Указываем имя лога, который будет вести Apache для этого хоста

Разжевывать смысл каждой строки не буду. Почитать про назначение директив конфига Apache можно ТУТ

Сохраняем файлик (и не забываем во втором конфиге везде проставить цифру 2 вместо 1).

3) Активируем виртуальные хосты

Теперь, когда директории и конфиги готовы к употреблению, нужно активировать хосты. Задача весьма банальная:

#> a2ensite tsite1ru.conf
#> a2ensite tsite2ru.conf
#> systemctl reload apache2
-10

Хосты активированы. Проверяем:

(для корректного обращения к серверу по тестовым доменным именам я создал статические DNS-записи на маршрутизаторе. Вы можете использовать файлик hosts в винде или в линуксе)
-11
-12

Что и требовалось получить.

***

«Ручной» способ активации хоста (вдруг пригодится)

Прописать символическую ссылку в директории «/etc/apache2/sites-enabled» на файл конфига и рестартануть Apache:

#> ln –s /etc/apache2/sites-available/tsite1ru.conf /etc/apache2/sites-enabled/tsite1ru.conf
#> ln –s /etc/apache2/sites-available/tsite2ru.conf /etc/apache2/sites-enabled/tsite2ru.conf
#> systemctl restart apache2

Шпаргалка:

Активация хоста: a2ensite имя_конфига.conf;

Деактивация хоста: a2dissite имя_конфига.conf;

Вывод всех команд «a2»: набрать «a2» и понажимать TAB;

Вывод всех доступных конфигов: набрать a2ensite (a2dissite) и понажимать TAB;

Перезагрузка конфигов Apache: systemctl reload apache2;

Создать символическую ссылку: ln –s /путь_к_файлу /путь_для_хранения_ссылки

На этом сегодня все!

В следующей статье об HTTPS и портах Apache.

Ставьте лайк и подписывайтесь!

До связи!

Сайт ProITLive

Мой Дзен

Мой канал в ВК

Мой канал в OK

Мой Facebook