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

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

Создание нескольких виртуальных хостов в Linux Apache.

Хост – это, так скажем, некий функциональный оконечник. Если очень сильно обобщить, то любой девайс в сети, которому можно назначить 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:

06 sshot 1

 

Настройка 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

06 sshot 2

 

Называйте директории (а в дальнейшем, файлы конфигураций, логи и т.п.), относящиеся к сайту (и не только), предельно лаконично, иначе потом придется долго вспоминать и разбираться, что и для чего создавалось.

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

<html>
     <center>
          Site 1 (Site 2 для второго)
     </center>
</html>

06 sshot 3

06 sshot 4

(файлики из консоли создаются командой «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).

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

 

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

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

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

Хост 1

Хост 2

 

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

06 sshot 8

 

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

06 sshot 5

Указываем имя сервера, алиасы хоста и корневую директорию.

 

06 sshot 6

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

 

06 sshot 7

Указываем имя лога, который будет вести Apache для этого хоста.

 

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

 

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

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

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

06 sshot 9

 

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

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

06 sshot 10

 

***

«Ручной» способ активации хоста

Прописать символическую ссылку в директории «/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 /путь_к_файлу /путь_для_хранения_ссылки