Apache — широко используемый веб-сервер с открытым исходным кодом. Рассказываем, как развернуть его на VPS с Rocky Linux, как настроить виртуальные хосты и подключить SSL-сертификат Let’s Encrypt.
Подготовка сервера

Установка веб-сервера Apache на Rocky Linux — это первый шаг к развёртыванию сайтов или веб-приложений на вашем VPS. Apache — веб-сервер с открытой архитектурой, активно применяемый в корпоративной и частной инфраструктуре, обеспечивает гибкость за счёт модульной архитектуры и простой настройки.

Перед установкой Apache необходимо подготовить операционную систему: обновить пакеты, установить базовые инструменты и настроить окружение. Это минимизирует риски конфликтов зависимостей и обеспечит доступ ко всем необходимым утилитам для дальнейшей работы.
Первым шагом выполните полное обновление системы. Обновление позволяет устранить уязвимости и получить последние версии пакетов, необходимых для стабильной работы.
Введите команду:
sudo dnf update -y
Здесь:
- update — обновление установленных пакетов;
- -y — автоматическое подтверждение действий, без этого флага система будет просить подтверждение перед каждым обновлением.
DNF (менеджер пакетов в Rocky Linux) обратится к репозиториям, указанным в /etc/yum.repos.d/, сравнит версии установленных пакетов с доступными и загрузит обновления. Если в процессе обновления обновляются ядро или критически важные системные библиотеки, может потребоваться перезагрузка сервера.
Некоторые пакеты не включены в базовую поставку Rocky Linux, но нужны для администрирования. Установите их командой:
sudo dnf install epel-release curl wget nano -y
Разберём каждый компонент:
- epel-release — подключает репозиторий EPEL (Extra Packages for Enterprise Linux). Это официальный источник дополнительных пакетов, таких как Certbot для SSL, современные версии PHP и другие.
- curl — утилита для отправки HTTP-запросов через терминал. Понадобится для проверки работы сервера, загрузки файлов и взаимодействия с API.
- wget — альтернатива curl для скачивания файлов по URL.
- nano — консольный редактор, подходящий для редактирования конфигурационных файлов. Новичкам он удобнее встроенного vi, так как использует привычные сочетания клавиш (Ctrl+O для сохранения, Ctrl+X для выхода).
После установки epel-release убедитесь, что репозиторий активирован:
sudo dnf repolist
В выводе должны присутствовать строки:
repo id repo name
epel Extra Packages for Enterprise Linux 9 - x86_64
Если репозитория нет, выполните:
sudo dnf clean all
sudo dnf update
Установка Apache
Теперь система обновлена, базовые утилиты установлены, и можно приступить к развёртыванию Apache. Этот этап включает установку пакета, настройку автозапуска и открытие портов в брандмауэре.
Установка пакета httpd
Apache в Rocky Linux распространяется под названием httpd (сокращение от HTTP Daemon — фоновый процесс для обработки HTTP-запросов). Для установки выполните:
sudo dnf install httpd -y
Во время выполнения команды DNF проверит зависимости, загрузит пакет из репозитория и установит его. Apache будет размещён в директориях:
- /etc/httpd/ — конфиги.
- /var/www/html/ — корневая директория веб-сервера.
- /usr/sbin/httpd — основной исполняемый файл Apache.
Запуск и автозагрузка сервиса
После установки необходимо запустить Apache и настроить автозагрузку при старте системы. Для управления сервисами в Rocky Linux используется systemd.
Запуск Apache:
sudo systemctl start httpd
Активация автозагрузки:
sudo systemctl enable httpd
Здесь enable создаёт символические ссылки в директориях systemd:
/etc/systemd/system/multi-user.target.wants/
Это нужно, чтобы сервис запускался автоматически при загрузке системы.
Проверка статуса:
sudo systemctl status httpd
Правильный вывод содержит Active: active (running). Если статус failed, проверьте логи:
journalctl -u httpd -n 50 --no-pager
-n 50 показывает последние 50 строк логов, а --no-pager выводит логи без постраничного просмотра.
Настройка брандмауэра
По умолчанию firewalld (служба брандмауэра в Rocky Linux) блокирует входящие соединения на порты 80 (HTTP) и 443 (HTTPS). Чтобы открыть доступ к веб-серверу извне, выполните:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
Здесь:
- firewall-cmd — утилита управления firewalld;
- --permanent — сохраняет правило после перезагрузки. Без этого флага настройки сбросятся;
- --add-service=http — добавляет правило для порта 80. Аналогично для HTTPS (порт 443);
- --reload — применяет изменения без перезапуска файрвола.
Проверка активных правил:
sudo firewall-cmd --list-all
В разделе services должны отображаться http и https.
Если firewalld не используется (например, установлен iptables), то откройте порты вручную:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo service iptables save
Если сайт будет работать исключительно через HTTPS, не открывайте порт 80. Однако для автоматического перенаправления с HTTP на HTTPS (через Certbot) порт 80 всё равно потребуется временно открыть.
После настройки убедитесь, что веб-сервер отвечает.
Локальная проверка:
curl http://localhost
Если вывод содержит HTML-код стандартной страницы Apache («Testing 123…») — сервер работает.
Для внешней проверки откройте в браузере:
http://IP_вашего_сервера
Базовая настройка Apache
Этот этап включает знакомство со структурой конфигурационных файлов, устранение предупреждений и проверку настроек перед применением.
Структура конфигурационных файлов
Apache использует модульную систему конфигурации, где основные параметры задаются в главном файле, а дополнительные подключаются из отдельных конфигов. Это упрощает управление настройками, особенно при работе с несколькими сайтами.
Главный конфигурационный файл:
/etc/httpd/conf/httpd.conf
Здесь определяются глобальные параметры:
- порт прослушивания (Listen 80);
- настройки процессов (StartServers, MaxRequestWorkers);
- пути к логам (ErrorLog, CustomLog).
Прямое редактирование этого файла не рекомендуется — изменения могут затруднить обновление Apache.
Директория для дополнительных конфигов:
/etc/httpd/conf.d/
Все файлы с расширением .conf из этой папки автоматически подключаются при запуске Apache. Здесь принято размещать:
- конфигурации виртуальных хостов;
- настройки SSL (например, ssl.conf);
- параметры модулей (php.conf, security.conf).
Настройка ServerName
При первом запуске Apache может выдавать предупреждение:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name
Такие предупреждения не повлияют на работу сервера, но могут затруднить анализ логов. Они связаны с отсутствием директивы ServerName, задающей доменное имя сервера. Откройте главный конфиг для редактирования:
sudo nano /etc/httpd/conf/httpd.conf
Найдите строку #ServerName www.example.com:80, раскомментируйте её и замените на:
ServerName localhost # для локальной настройки
Для продакшена укажите домен. Затем сохраните изменения.
Тест конфигурации
Перед перезагрузкой Apache всегда проверяйте синтаксис файлов конфигурации. Это предотвратит остановку сервера из-за опечаток или ошибок:
sudo apachectl configtest
Возможные результаты:
Syntax OK — ошибок нет, можно перезагружать сервер.
Syntax error — ошибка с путём к проблемному файлу и номер строки.
Например:
AH00526: Syntax error on line 56 of /etc/httpd/conf.d/example.com.conf
В этом случае откройте указанный файл, исправьте ошибку и повторите проверку.
После успешной проверки примените изменения:
sudo systemctl restart httpd
Сделать это можно двумя командами — restart или reload:
- restart — полностью останавливает и запускает сервис заново. Подходит, если изменения затрагивают порты или модули.
- reload — мягкое обновление конфигурации без остановки сервера. Используется при изменении виртуальных хостов или прав доступа.
Дополнительные рекомендации
Резервное копирование конфигов перед редактированием:
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
Это позволит быстро откатиться в случае ошибки.
Просмотр логов в реальном времени:
sudo tail -f /var/log/httpd/error_log
Команда tail -f выводит последние строки лога и обновляет их по мере появления новых записей.
Отключение ненужных модулей для повышения безопасности. Например, если не используется .htaccess, добавьте в конфиг:
<Directory "/var/www/html">
AllowOverride None
</Directory>
Настройка виртуальных хостов
Благодаря виртуальным хостам можно размещать несколько сайтов на одном сервере — каждый со своей конфигурацией. Это полезно, если вы управляете несколькими доменами или поддоменами. Настройка включает создание директорий для сайтов, настройку прав доступа и регистрацию хостов в Apache.
Создание директории для сайта
Каждому сайту нужна отдельная директория для хранения файлов (HTML, CSS, скриптов). Стандартная практика — использовать структуру /var/www/домен/public_html, где public_html — корневая папка сайта.
Выполните команды:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R apache:apache /var/www/example.com
Где:
- mkdir -p — создаёт все недостающие родительские директории;
- chown -R — рекурсивно меняет владельца директории и её содержимого на пользователя и группу apache.
Это критически важно, так как Apache по умолчанию работает от имени пользователя apache и должен иметь права на чтение файлов сайта.
Если пропустить смену владельца, сервер вернёт ошибку 403 Forbidden, так как процесс Apache не сможет получить доступ к файлам.
Создание конфига виртуального хоста
Конфигурация каждого сайта хранится в отдельном файле внутри /etc/httpd/conf.d/. Это упрощает управление: можно отключать сайты, удаляя или переименовывая файлы и не затрагивая основной конфиг.
Создайте файл конфигурации:
sudo nano /etc/httpd/conf.d/example.com.conf
Добавьте блок:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog /var/log/httpd/example.com-error.log
CustomLog /var/log/httpd/example.com-access.log combined
</VirtualHost>
Разберём директивы:
- <VirtualHost *:80> — определяет виртуальный хост, слушающий порт 80 (HTTP) на всех IP-адресах сервера (*).
- ServerAdmin — email администратора. Указывается в сообщениях об ошибках (например, «500 Internal Server Error»).
- ServerName — основной домен сайта. Должен совпадать с доменным именем, на которое настроен DNS.
- DocumentRoot — путь к корневой директории сайта.
- ErrorLog — путь к логу ошибок. Удобно хранить логи каждого сайта отдельно.
- CustomLog — лог доступа. Параметр combined задаёт расширенный формат записи (включая User-Agent и Referer).
Дополнительные параметры:
- ServerAlias — список дополнительных доменов (например, с префиксом www):
ServerAlias www.example.com example.org
- DirectoryIndex — файлы, которые Apache будет искать при обращении к директории:
DirectoryIndex index.php index.html index.htm
- Redirect — перенаправление запросов:
Redirect permanent /old-page https://example.com/new-page
После сохранения файла перезагрузите Apache (reload или restart).
Проверка работы
Создайте тестовый файл index.html в директории сайта:
echo "<h1>Hello from example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
Откройте сайт в браузере. Если DNS ещё не настроен, добавьте запись в файл /etc/hosts на локальной машине:
IP_сервера example.com
Оптимизация логов
Чтобы логи не занимали всё дисковое пространство, настройте их ротацию. Создайте файл /etc/logrotate.d/example.com:
/var/log/httpd/example.com-*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 640 apache apache
sharedscripts
postrotate
/bin/systemctl reload httpd > /dev/null
endscript
}
Активация SSL (Let’s Encrypt)
Защита сайта с помощью HTTPS — обязательный этап настройки веб-сервера. Сертификаты Let’s Encrypt бесплатны и признаны большинством браузеров, что делает их удобным решением для начальной защиты сайта. Certbot же автоматизирует их получение и установку. Рассмотрим процесс шаг за шагом.
Установка Certbot
Certbot — официальный клиент Let’s Encrypt, который упрощает генерацию и обновление сертификатов. Для работы с Apache потребуется также плагин python3-certbot-apache, интегрирующийся с конфигурацией веб-сервера. Без него Certbot не сможет вносить изменения в виртуальные хосты.
Установите пакеты:
sudo dnf install certbot python3-certbot-apache -y
Получение сертификата
Выполните команду для генерации SSL-сертификата:
sudo certbot --apache -d example.com
Здесь --apache активирует режим автоматической настройки Apache, а -d — указывает на доменное имя. Если доменов несколько, перечислите их все.
Certbot временно запустит веб-сервер на порту 80 для подтверждения права владения доменом. Убедитесь, что порт 80 открыт в файрволе.
Выбор параметров HTTPS:
- Рекомендуется включить перенаправление с HTTP на HTTPS для повышения безопасности и соблюдения современных требований браузеров.
- Certbot автоматически добавит блок <VirtualHost *:443> с параметрами SSL в файл виртуального хоста.
- Сертификаты будут размещаются в /etc/letsencrypt/live/example.com/. Приватные ключи защищены правами доступа 600, что означает доступ только для пользователя root.
Если Certbot не находит виртуальный хост, укажите путь к конфигу:
sudo certbot --apache -d example.com --apache-server-root /etc/httpd/conf.d/
Автоматическое обновление сертификатов
Сначала проверьте работу обновления:
sudo certbot renew --dry-run
Команда renew проверяет все установленные сертификаты и обновляет те, срок которых заканчивается через 30 дней. А --dry-run указывает на тестовый режим — не вносит изменений, но проверяет корректность процедуры.
Настройте cron. Откройте файл планировщика:
sudo crontab -e
Добавьте строку:
0 0 * * * /usr/bin/certbot renew --quiet
0 0 * * * означает запуск ежедневно в полночь, а --quiet подавляет вывод, кроме ошибок.
Альтернативный способ через systemd — создайте таймер для службы certbot-renew:
sudo systemctl enable --now certbot-renew.timer
Дополнительные настройки SSL
Чтобы усилить безопасность, добавьте параметры шифрования в файле виртуального хоста:
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM
SSLProtocol TLSv1.2 TLSv1.3
SSLHonorCipherOrder On
Добавьте заголовок для принудительного использования HTTPS:
Header always set Strict-Transport-Security "max-age=300; includeSubDomains"
Укажите max-age=300 (5 минут) для тестирования, затем увеличьте значение.
Настройте перенаправление www → не-www (или наоборот). В конфиге домена добавьте:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ https://example.com$1 [L,R=301]
Заключение
Теперь веб-сервер Apache установлен и настроен. Ваш сайт доступен по HTTPS, конфигурация готова к работе с несколькими доменами. Настройка виртуальных хостов позволила организовать размещение нескольких доменов на одном сервере, а автоматическое обновление SSL-сертификатов гарантирует постоянную безопасность.
Читайте в блоге:
- Как установить и настроить Apache, PHP и MariaDB (LAMP-стек) в Ubuntu 22.04
- Установка и настройка Apache на Ubuntu 22.04 LTS и Debian 12
- Пересылка журналов Apache в OpenSearch через Logstash