// Blog

Как установить и настроить Apache2 с Virtual Hosts на VPS Linux: полное руководство

04 октября 2026 г. · by Alex M.

Как установить и настроить Apache2 с Virtual Hosts на VPS Linux: полное руководство

Apache2 — один из самых зрелых и популярных веб-серверов в мире. Он используется миллионами сайтов и поддерживает богатую экосистему модулей. Если у вас есть VPS NVMe и вы хотите разместить несколько сайтов на одном сервере, функция Virtual Hosts позволяет это сделать элегантно и без лишних затрат. В этом руководстве мы пройдём весь путь от установки до настройки безопасности на Ubuntu 22.04.

Что такое Virtual Hosts и зачем они нужны?

Virtual Hosts (виртуальные хосты) позволяют запускать несколько сайтов на одном сервере с одним IP-адресом, каждый с собственным доменом, конфигурацией и директорией файлов. Например, на одном VPS SSD можно одновременно размещать site1.md, site2.md и blog.company.com.

Существует два основных типа:

  • Name-based Virtual Hosts — разграничение по имени домена (наиболее распространённый вариант)
  • IP-based Virtual Hosts — каждый сайт получает отдельный IP-адрес

В этом руководстве мы сосредоточимся на name-based virtual hosts, которые подходят для большинства production-сценариев.

Предварительные требования

Перед началом убедитесь, что у вас есть:

  • VPS с Ubuntu 22.04 (или Debian 11/12)
  • Root-доступ или пользователь с правами sudo
  • Хотя бы один зарегистрированный домен с DNS, направленным на IP сервера
  • Активное SSH-соединение

Если у вас ещё нет сервера, запустите VPS NVMe от CLIQHOST — готов к работе за несколько минут.

Шаг 1: Обновление системы и установка Apache2

Подключитесь к серверу по SSH и обновите список пакетов:

sudo apt update && sudo apt upgrade -y

Установите Apache2:

sudo apt install apache2 -y

Проверьте статус службы:

sudo systemctl status apache2

Если всё в порядке, вы увидите active (running). Включите автозапуск при перезагрузке:

sudo systemctl enable apache2

Настройка брандмауэра (UFW)

Если вы используете UFW, разрешите HTTP и HTTPS трафик:

sudo ufw allow 'Apache Full'
sudo ufw status

Теперь, если открыть IP сервера в браузере, должна появиться стандартная страница Apache2.

Шаг 2: Структура директорий для Virtual Hosts

По соглашению каждый сайт имеет собственную директорию в /var/www/. Создадим структуру для двух демо-сайтов:

sudo mkdir -p /var/www/site1.md/public_html
sudo mkdir -p /var/www/site2.md/public_html

Назначьте владельца текущему пользователю:

sudo chown -R $USER:$USER /var/www/site1.md/public_html
sudo chown -R $USER:$USER /var/www/site2.md/public_html

Установите правильные права доступа:

sudo chmod -R 755 /var/www/site1.md
sudo chmod -R 755 /var/www/site2.md

Создайте тестовые HTML-страницы:

nano /var/www/site1.md/public_html/index.html

Пример содержимого:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <title>Site1.md</title>
</head>
<body>
  <h1>Добро пожаловать на site1.md!</h1>
  <p>Apache2 Virtual Host работает корректно.</p>
</body>
</html>

Повторите для site2.md.

Шаг 3: Создание конфигурационных файлов Virtual Host

Apache2 хранит конфигурации сайтов в /etc/apache2/sites-available/. Создадим конфигурацию для первого сайта:

sudo nano /etc/apache2/sites-available/site1.md.conf

Полное содержимое:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site1.md
    ServerAlias www.site1.md
    DocumentRoot /var/www/site1.md/public_html

    <Directory /var/www/site1.md/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site1.md-error.log
    CustomLog ${APACHE_LOG_DIR}/site1.md-access.log combined
</VirtualHost>

Создайте конфигурацию для второго сайта:

sudo nano /etc/apache2/sites-available/site2.md.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName site2.md
    ServerAlias www.site2.md
    DocumentRoot /var/www/site2.md/public_html

    <Directory /var/www/site2.md/public_html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/site2.md-error.log
    CustomLog ${APACHE_LOG_DIR}/site2.md-access.log combined
</VirtualHost>

Активация Virtual Hosts

Активируйте новые сайты и отключите стандартный (по желанию):

sudo a2ensite site1.md.conf
sudo a2ensite site2.md.conf
sudo a2dissite 000-default.conf

Проверьте синтаксис конфигурации:

sudo apache2ctl configtest

Должно появиться Syntax OK. Перезагрузите Apache2:

sudo systemctl reload apache2

Шаг 4: Активация необходимых модулей Apache2

Apache2 поставляется с богатым набором модулей. Наиболее полезные для production-сервера:

# Модуль перезаписи URL (необходим для WordPress, Joomla и др.)
sudo a2enmod rewrite

# Модуль сжатия GZIP
sudo a2enmod deflate

# Модуль HTTP-заголовков (безопасность)
sudo a2enmod headers

# Модуль кэширования
sudo a2enmod cache cache_disk

sudo systemctl restart apache2

Почему важен модуль rewrite?

Без mod_rewrite ЧПУ WordPress, правила .htaccess и SEO-friendly URL не будут работать. Директива AllowOverride All позволяет Apache2 читать файлы .htaccess из директории сайта.

Шаг 5: Защита Apache2

Веб-сервер, доступный из интернета, требует hardening. Вот ключевые настройки.

Скрытие версии Apache2

Отредактируйте основной файл безопасности:

sudo nano /etc/apache2/conf-available/security.conf

Установите:

ServerTokens Prod
ServerSignature Off
TraceEnable Off

Отключение листинга директорий

Если в директории нет index.html или index.php, Apache2 может показать её содержимое — это уязвимость. Убедитесь, что в конфигурации Virtual Host указано:

Options -Indexes

Добавление HTTP-заголовков безопасности

В файл Virtual Host или .htaccess:

<IfModule mod_headers.c>
    Header always set X-Content-Type-Options "nosniff"
    Header always set X-Frame-Options "SAMEORIGIN"
    Header always set X-XSS-Protection "1; mode=block"
    Header always set Referrer-Policy "strict-origin-when-cross-origin"
</IfModule>

Ограничение допустимых HTTP-методов

<LimitExcept GET POST HEAD>
    deny from all
</LimitExcept>

Для расширенной защиты сервера наш сервис администрирования серверов берёт на себя настройку и мониторинг.

Шаг 6: Установка SSL с Let's Encrypt (HTTPS)

Каждый современный сайт должен работать по HTTPS. Установите Certbot:

sudo apt install certbot python3-certbot-apache -y

Получите бесплатный SSL-сертификат:

sudo certbot --apache -d site1.md -d www.site1.md

Certbot автоматически изменит файл Virtual Host и настроит перенаправление HTTP → HTTPS. Проверьте автоматическое продление:

sudo certbot renew --dry-run

Если вам нужен коммерческий SSL-сертификат с проверкой организации (OV) или расширенной проверкой (EV), CLIQHOST предлагает полный ассортимент.

Шаг 7: Оптимизация производительности Apache2

Настройка MPM (Multi-Processing Module)

Apache2 поддерживает три MPM-модуля: prefork, worker и event. Для максимальной производительности с PHP-FPM используйте event:

sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo systemctl restart apache2

Включение сжатия GZIP

Добавьте в конфигурацию Virtual Host или .htaccess:

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/plain text/html text/css
    AddOutputFilterByType DEFLATE application/javascript application/json
    AddOutputFilterByType DEFLATE image/svg+xml application/xml
</IfModule>

Кэширование статического контента

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpeg "access plus 1 year"
    ExpiresByType image/png "access plus 1 year"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
</IfModule>

Шаг 8: Работа с логами

Логи необходимы для отладки и мониторинга. Каждый Virtual Host имеет собственные файлы логов:

# Просмотр логов ошибок в реальном времени
sudo tail -f /var/log/apache2/site1.md-error.log

# Просмотр логов доступа
sudo tail -f /var/log/apache2/site1.md-access.log

Для автоматической ротации логов Apache2 использует logrotate. Файл конфигурации находится по адресу /etc/logrotate.d/apache2.

Основные команды Apache2 — краткий справочник

Команда Описание
sudo systemctl start apache2 Запустить службу
sudo systemctl stop apache2 Остановить службу
sudo systemctl restart apache2 Полный перезапуск
sudo systemctl reload apache2 Перезагрузить конфигурацию без простоя
sudo a2ensite name.conf Активировать Virtual Host
sudo a2dissite name.conf Деактивировать Virtual Host
sudo a2enmod module Активировать модуль
sudo a2dismod module Деактивировать модуль
sudo apache2ctl configtest Проверить синтаксис конфигурации
sudo apache2ctl -M Список активных модулей

Частые проблемы и их решение

Ошибка 403 Forbidden

Частые причины: неверные права на директории, Options -Indexes без index.html, или AllowOverride None вместо All. Проверьте:

ls -la /var/www/site1.md/public_html
sudo apache2ctl configtest

Ошибка 404 Not Found

Проверьте, правильно ли указаны ServerName и ServerAlias, и направлен ли DNS домена на IP сервера.

Apache2 не запускается

Посмотрите логи:

sudo journalctl -xe | grep apache2
sudo tail -50 /var/log/apache2/error.log

Порт 80 занят

sudo ss -tlnp | grep :80

Если Nginx уже работает на порту 80, нужно остановить одну из служб или перевести Apache2 на другой порт.

Заключение

Apache2 с Virtual Hosts — надёжное и гибкое решение для размещения нескольких сайтов на одном сервере. Вы прошли весь путь: установку, настройку Virtual Hosts, активацию ключевых модулей, защиту сервера, установку SSL и оптимизацию производительности.

Для стабильной работы этой конфигурации изучите наши предложения VPS NVMe и выделенные серверы — гарантированная производительность, техническая поддержка 24/7 и современная инфраструктура.

Есть вопросы или нужна помощь с настройкой? Свяжитесь с командой CLIQHOST или найдите больше технических руководств в нашем блоге.

SHARE
// what clients say

What Our Clients Say

Real reviews from customers who trust CLIQHOST for performance, reliability and expert technical support.

★★★★★

"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."

AM
Andrei M.
eCommerce owner · Chișinău
★★★★★

"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."

EV
Elena V.
Web agency · Bălți
★★★★★

"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."

DC
Dmitri C.
SaaS founder · Chișinău