VDS · Сайты и веб-серверы

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

Установка Apache на VDS, настройка виртуальных хостов и модулей, а также разбор типичных конфликтов с Nginx на 80-м порту.

Обновлено 23 августа 2026 г.

Apache берут, когда нужен .htaccess, старая CMS или готовая инструкция от разработчика приложения. По памяти он тяжелее Nginx, но на VDS-1 с одним небольшим сайтом это незаметно.

Установка

apt update && apt install -y apache2        # Debian, Ubuntu
dnf install -y httpd && systemctl enable --now httpd   # AlmaLinux, CentOS Stream

Имя службы отличается: apache2 в Debian и Ubuntu, httpd в семействе RHEL. Каталоги конфигурации тоже разные — /etc/apache2 и /etc/httpd.

Проверка:

systemctl status apache2
curl -I http://127.0.0.1

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

Файл /etc/apache2/sites-available/example.ru.conf:

<VirtualHost *:80>
    ServerName example.ru
    ServerAlias www.example.ru
    DocumentRoot /var/www/example.ru

    <Directory /var/www/example.ru>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

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

Включение и проверка:

a2ensite example.ru
a2dissite 000-default
apachectl configtest && systemctl reload apache2

AllowOverride All нужен только если вы действительно пользуетесь .htaccess. Если нет — ставьте None: Apache перестанет искать эти файлы в каждом каталоге на каждый запрос.

Модули

a2enmod rewrite headers ssl
systemctl restart apache2

Список включённого — apache2ctl -M. Не включайте всё подряд: каждый модуль загружается в каждый рабочий процесс.

Для PHP используйте связку с PHP-FPM, а не устаревший mod_php: PHP-FPM.

Apache и Nginx вместе

Оба сервера по умолчанию слушают 80-й порт, и второй просто не запустится с ошибкой Address already in use. Варианта два:

  • оставить один сервер;
  • поставить Nginx фронтом, Apache перевести на Listen 127.0.0.1:8080 и проксировать на него — см. обратный прокси.

Кто занял порт, покажет:

ss -tulpn | grep :80

Частые ошибки

СимптомПричина
AH00558: Could not reliably determine ... server's fully qualified domain nameНе задан ServerName — предупреждение, но задайте его
.htaccess не работаетAllowOverride None в блоке Directory
Служба не стартует после правкиСинтаксис — всегда apachectl configtest перед reload
403 на каталогеНет Require all granted или нет прав у www-data

Логи: /var/log/apache2/ (Debian, Ubuntu) или /var/log/httpd/ (AlmaLinux).

Перед каждой правкой копируйте конфиг: cp file file.bak. На виртуальной машине откатить проще, чем вспоминать, что вы поменяли час назад.