Моя шпаргалка :)

Мануалы и настройки => Настройки *nix (почта, web, система etc) => Web servers => Тема начата: George от Сен. 20, 2022, 11:41

Название: Apache Настройка виртуальных хостов
Отправлено: George от Сен. 20, 2022, 11:41
Настройка виртуальных хостов (опционально)

Apache позволяет запустить на одной машине несколько веб-сайтов — при этом данные каждого сайта будут лежать в разных директориях. Для этого используются конфигурационные файлы — виртуальные хосты.

Допустим, мы хотим разместить на одном сервере два сайта. Сконфигурируем Apache.
Создание директорий

Размещать файлы виртуальных хостов будем внутри директории /var/www/. Для каждого хоста создадим новую отдельную директорию:

sudo mkdir -p /var/www/first_IP

sudo mkdir -p /var/www/second_IP

Обратите внимание, что вместо IP-адреса можно использовать и доменное имя.
Предоставление прав

Сейчас права доступа к директориям есть только у root-пользователя. Настроим права всем пользователям системы, используя переменную среды $USER:

sudo chown -R $USER:$USER /var/www/first_IP

sudo chown -R $USER:$USER /var/www/second_IP

Откроем пользователю доступ на чтение, редактирование и запуск файлов в директории /var/www:

sudo chmod -R 755 /var/www

Создание страниц для тестирования

В дальнейшем нам нужно будет проверить, правильно ли настроены виртуальные хосты. Для этого можно создать для каждого IP-адреса (домена) HTML-страницы, которые будут открываться в браузере при вводе соответствующего IP или домена, например, главные страницы index.html.

Создадим страницу для первого IP:

sudo nano /var/www/first_IP/index.html

Добавим на страницу текст:

<html>
    <head>
        <title>First IP</title>
    </head>
    <body>
        <h1>Wow! First Site works!</h1>
    </body>
</html>

Сохраним и закроем файл.

Выполним то же самое и для второго сайта:

sudo nano /var/www/second_IP/index.html

Добавим содержимое:

<html>
    <head>
        <title>Second IP</title>
    </head>
    <body>
        <h1>Wow! Second Site works!</h1>
    </body>
</html>

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

По умолчанию в Apache используется виртуальный хост 000-default.conf. Этот файл мы будем использовать как шаблон для создания собственных виртуальных хостов.

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

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/first_IP.conf

Откроем новый конфигурационный файл первого сайта:

sudo nano /etc/apache2/sites-available/first_IP.conf

Изменим значения в файле:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName first_IP
    DocumentRoot /var/www/first_IP
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Где:

    ServerAdmin — электронная почта администратора сайта;
    ServerName — IP-адрес сайта или его доменное имя;
    DocumentRoot — директория, в которой хранится конфигурационный файл (виртуальный хост).

Сохраним и закроем файл.

Подобным образом создадим конфигурационный файл для второго сайта:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/second_IP.conf

sudo nano /etc/apache2/sites-available/second_IP.conf

Содержимое конфигурационного файла /etc/apache2/sites-available/second_IP.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName second_IP
    DocumentRoot /var/www/second_IP
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Активация виртуальных хостов

Активируем виртуальные хосты с помощью a2ensite:

sudo a2ensite first_IP.conf

sudo a2ensite second_IP.conf

Отключим виртуальный хост, который создается по умолчанию:

sudo a2dissite 000-default.conf

Проверим, нет ли ошибок в конфигурационных файлах:

sudo apache2ctl configtest

Если ошибки отсутствуют, то получим результат:

Syntax OK

Перезапустим Apache, чтобы активировать все изменения:

sudo systemctl restart apache2

Теперь Apache должен обслуживать сайты, IP-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы: