MHOSTMHOST

Apache: установка и виртуальные хосты

В этой статье вы установите веб-сервер Apache на свой VPS mHost, настроите виртуальный хост (VirtualHost) под отдельный сайт, проверите конфигурацию и откроете нужные порты в файрволе — в результате получите рабочий Apache, который отдаёт содержимое вашего сайта по HTTP.

Что понадобится

  • Доступ к серверу по SSH под пользователем root или под пользователем с sudo.
  • VPS mHost на одной из поддерживаемых ОС: Ubuntu 22.04/24.04, Debian 11/12, AlmaLinux/Rocky Linux 8/9.
  • (по желанию) доменное имя, A-запись которого указывает на IP-адрес сервера — для проверки подойдёт и просто IP.
Совет: если нужен не только веб-сервер, а сразу весь стек — Apache + MySQL + PHP (плюс Nginx), — можно воспользоваться готовым рецептом LAMP в VMmanager 6 (см. статью «Готовые рецепты VMmanager 6»; чтобы его запустить, сначала войдите в панель — статья «Как войти в VMmanager 6»). Ниже — как поставить и настроить именно Apache вручную.

Шаг 1. Установите Apache

Debian / Ubuntu

Пакет называется apache2:

bash
sudo apt update
sudo apt install apache2

AlmaLinux / Rocky Linux

Пакет называется httpd:

bash
sudo dnf install httpd

Шаг 2. Включите автозапуск и запустите Apache

Debian / Ubuntu

bash
sudo systemctl enable --now apache2
sudo systemctl status apache2

AlmaLinux / Rocky Linux

bash
sudo systemctl enable --now httpd
sudo systemctl status httpd

Флаг --now сразу и включает автозапуск при загрузке сервера, и запускает службу. В выводе status должно быть active (running). Откройте http://<IP>/ (IP-адрес вашего сервера) в браузере — должна открыться тестовая страница Apache по умолчанию.

Шаг 3. Создайте виртуальный хост (VirtualHost)

Виртуальный хост описывает отдельный сайт на сервере: свой DocumentRoot (каталог с файлами), доменное имя и логи. Ниже — пример для домена example.com, замените на свой.

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

bash
sudo mkdir -p /var/www/example.com/public_html
echo "<h1>It works: example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html

Debian / Ubuntu

Создайте файл /etc/apache2/sites-available/example.com.conf:

bash
sudo nano /etc/apache2/sites-available/example.com.conf

и вставьте в него:

bash
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

AlmaLinux / Rocky Linux

Создайте файл /etc/httpd/conf.d/example.com.conf:

bash
sudo nano /etc/httpd/conf.d/example.com.conf

и вставьте в него (пути логов другие — переменной APACHE_LOG_DIR тут нет):

bash
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin admin@example.com
    DocumentRoot /var/www/example.com/public_html

    <Directory /var/www/example.com/public_html>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog /var/log/httpd/example.com-error.log
    CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
Совет: AllowOverride All разрешает переопределять настройки через .htaccess в каталоге сайта (пригодится для CMS/приложений); без строки Require all granted Apache 2.4 ответит 403 Forbidden на все запросы к этому каталогу.

Шаг 4. Включите сайт и модули: a2ensite / a2enmod

Debian / Ubuntu

Debian и Ubuntu хранят все сайты в sites-available/, а подключают — символьной ссылкой в sites-enabled/; вручную ссылки создавать не нужно, это делает a2ensite (имя сайта указывайте вместе с .conf):

bash
sudo a2ensite example.com.conf

Модули Apache включаются похожей командой a2enmod — например, mod_rewrite (часто нужен вместе с AllowOverride All для правил в .htaccess):

bash
sudo a2enmod rewrite
sudo systemctl restart apache2
Совет: модулям после включения нужен именно restart, а не reload, — они подгружаются при старте процесса Apache. Отключить сайт можно командой sudo a2dissite example.com.conf; стандартный тестовый сайт Apache отключается так: sudo a2dissite 000-default.conf.

AlmaLinux / Rocky Linux

Отдельной команды-аналога a2ensite здесь нет: любой файл *.conf из /etc/httpd/conf.d/ Apache подключает автоматически при старте — через директиву IncludeOptional conf.d/*.conf в /etc/httpd/conf/httpd.conf. Большинство стандартных модулей (включая mod_rewrite) в AlmaLinux/Rocky уже включены по умолчанию — их директивы LoadModule лежат в /etc/httpd/conf.modules.d/.

Совет: проверить, какие модули сейчас загружены, можно командой httpd -M | grep rewrite; если нужного модуля нет в списке — раскомментируйте соответствующую строку LoadModule в /etc/httpd/conf.modules.d/ и перезапустите Apache.

Шаг 5. Проверьте конфигурацию и перезапустите Apache

Перед перезапуском всегда проверяйте синтаксис конфигурации — команда одна и та же на всех дистрибутивах:

bash
sudo apachectl configtest

При корректной конфигурации в ответ придёт Syntax OK; при ошибке apachectl укажет файл и строку.

Debian / Ubuntu

bash
sudo systemctl reload apache2

AlmaLinux / Rocky Linux

bash
sudo systemctl reload httpd
Совет: reload перечитывает конфигурацию без разрыва текущих соединений — этого достаточно после a2ensite и правок VirtualHost. restart останавливает и заново запускает процесс целиком — он нужен после включения/отключения модулей (Шаг 4).

Проверить, что виртуальный хост ответил именно нужным сайтом, можно ещё до того, как домен указывает на сервер, — через заголовок Host:

bash
curl -H 'Host: example.com' http://localhost/

В ответе должна прийти тестовая страница «It works: example.com».

Готово: если curl (или браузер — по IP или по домену) показывает содержимое index.html — виртуальный хост настроен и работает.

Шаг 6. Откройте порты в файрволе

Apache слушает порт 80 (HTTP), а после подключения TLS — ещё и 443 (HTTPS); порты нужно открыть в файрволе, иначе сайт останется недоступен снаружи.

Debian / Ubuntu

Пакет apache2 сам регистрирует в ufw профиль Apache Full, который открывает оба порта разом:

bash
sudo ufw app list
sudo ufw allow 'Apache Full'

Если такого профиля в списке нет (например, на Debian он не всегда регистрируется), откройте порты по номерам:

bash
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Важно: подробнее про установку, включение и профили ufw — в статье «UFW: настройка файрвола».

AlmaLinux / Rocky Linux

Порты открываются через firewalld:

bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Совет: если sudo firewall-cmd --state показывает not running, сначала включите firewalld: sudo systemctl enable --now firewalld.

Что дальше

Apache установлен, виртуальный хост настроен, порты открыты — сайт доступен по HTTP. Дальше можно:

  • добавить ещё один VirtualHost по той же схеме (Шаг 3) — для второго домена на этом же сервере;
  • настроить TLS-сертификат, чтобы сайт открывался по HTTPS;
  • если ещё не заходили в панель — начните со статьи «Как войти в VMmanager 6»; полный список готовых рецептов (включая LAMP) — в статье «Готовые рецепты VMmanager 6».