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. На виртуальной машине откатить проще, чем вспоминать, что вы поменяли час назад.