После правки конфигурации Apache, установки модуля или нового сертификата веб-сервер нужно перечитать настройки. Сделать это можно двумя способами: полным перезапуском или мягкой перезагрузкой конфигурации. Команды зависят от дистрибутива, а главное отличие - в имени службы.

apache2 или httpd

  • Debian, Ubuntu и производные - служба называется apache2.
  • RHEL, CentOS, Rocky Linux, AlmaLinux, Fedora - служба называется httpd.

Если не уверены, проверьте:

bash
systemctl list-units --type=service | grep -E 'apache2|httpd'

Все команды ниже требуют прав root, поэтому выполняются через sudo.

Команды systemctl

Почти все современные дистрибутивы используют systemd, и управление Apache сводится к systemctl.

Debian и Ubuntu:

bash
sudo systemctl restart apache2   # полный перезапуск
sudo systemctl reload apache2    # перечитать конфигурацию без остановки
sudo systemctl start apache2     # запустить
sudo systemctl stop apache2      # остановить
sudo systemctl status apache2    # состояние и последние строки лога

RHEL, Fedora и родственные системы - те же команды с httpd:

bash
sudo systemctl restart httpd
sudo systemctl reload httpd

Чтобы Apache запускался при загрузке системы:

bash
sudo systemctl enable apache2

restart или reload

Слева сервер с кнопкой питания, справа сервер со стрелкой обновления и файлом

restart останавливает все процессы Apache и запускает их заново. Текущие соединения обрываются, на секунду-другую сайт недоступен.

reload отправляет Apache сигнал на мягкий перезапуск (graceful): главный процесс перечитывает конфигурацию, старые рабочие процессы дообслуживают текущие запросы и завершаются, новые стартуют уже с новыми настройками. Посетители этого не замечают.

Для обычных правок - виртуальные хосты, редиректы, сертификаты, включение модуля через a2enmod - достаточно reload. restart нужен, если Apache завис, после обновления самого пакета или когда reload не помог.

Сначала проверьте конфигурацию

Если в конфигурации ошибка, после restart Apache просто не запустится, и все сайты на сервере лягут. Поэтому перед перезапуском полезно проверить синтаксис:

bash
sudo apachectl configtest

В Debian и Ubuntu то же самое делает sudo apache2ctl -t. Ответ Syntax OK означает, что можно перезапускать. Иначе команда покажет файл и номер строки с ошибкой.

Удобно объединить проверку и перезагрузку, чтобы вторая выполнялась только при успешной первой:

bash
sudo apachectl configtest && sudo systemctl reload apache2

apachectl

У Apache есть собственная утилита управления. Она пригодится там, где нет systemd, или если Apache собран вручную:

bash
sudo apachectl graceful   # мягкий перезапуск, как reload
sudo apachectl restart    # полный перезапуск
sudo apachectl -k graceful-stop  # остановить, дав дообслужить запросы

В системах с systemd лучше пользоваться systemctl: так systemd правильно отслеживает состояние службы.

Старые и другие системы

На старых системах без systemd работают команды через init-скрипт:

bash
sudo service apache2 restart
sudo /etc/init.d/apache2 restart

В Alpine Linux (OpenRC):

bash
sudo rc-service apache2 restart

В FreeBSD служба обычно называется по версии пакета, например apache24:

bash
sudo service apache24 restart

В macOS Apache встроен в систему и управляется через sudo apachectl restart.

Если Apache работает в Docker-контейнере, перезапускают контейнер (docker restart имя) или отправляют мягкий перезапуск внутрь: docker exec имя apachectl graceful.

Если Apache не запустился

Первым делом посмотрите, что пишет systemd и журнал ошибок:

bash
sudo systemctl status apache2
sudo journalctl -u apache2 -n 50

Журнал ошибок самого Apache лежит в /var/log/apache2/error.log (Debian, Ubuntu) или /var/log/httpd/error_log (RHEL и родственные).

Частые причины:

  • Address already in use - порт 80 или 443 уже занят другим процессом, например Nginx или второй копией Apache. Найти виновника: sudo ss -tlnp | grep -E ':80|:443'.
  • Syntax error - ошибка в конфигурации. apachectl configtest покажет, где именно.
  • SSL-ошибки - неверный путь к сертификату или ключу, ключ не подходит к сертификату, нет прав на чтение файлов.
  • AH00558: Could not reliably determine the server's fully qualified domain name - это предупреждение, а не ошибка, Apache работает. Чтобы оно исчезло, добавьте в основную конфигурацию строку ServerName localhost или реальное имя сервера.
  • Permission denied при запуске на порту 80 - Apache запущен не от root. Порты ниже 1024 может открыть только привилегированный процесс, поэтому запускайте службу через sudo systemctl.

О том же для другого популярного веб-сервера - в статье про перезапуск Nginx.