AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
#Что это за сообщение
AH00558 — предупреждение, а не ошибка. Apache при запуске пытается определить полное имя хоста и, если не получилось, использует 127.0.1.1 или другой адрес. Сайты продолжают работать, но сообщение появляется при каждом configtest, reload и restart, засоряя вывод. Оно возникает, когда не задан глобальный ServerName, имя хоста в /etc/hostname и /etc/hosts не соответствует или не разрешается.
#Типичные причины
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Не задан глобальный ServerNameНет директивы. | Предупреждение при запуске. | Добавьте ServerName. |
| Имя хоста не разрешаетсяНет записи в hosts. | hostname -f пустой. | Добавьте запись. |
| Короткое имя вместо FQDNmyserver вместо example.ru. | Используется 127.0.1.1. | Задайте полное имя. |
| Файл конфигурации не подключёнЗабыли a2enconf. | Директива не действует. | Включите файл. |
| Несколько Apache на машинеРазные конфигурации. | Правили не тот. | Найдите нужный файл через apachectl -V. |
| Опечатка в директивеСинтаксис. | configtest показывает ошибку. | Исправьте. |
#Как исправить
- Узнайте имя хоста сервераНа сервере с Apache откройте терминал и выполните
hostnamectlиhostname -f. Запишите, какое имя вы собираетесь использовать для идентификации самого веб-сервера; оно может бытьlocalhostпри локальной разработке, либо полное имя сервера. Предупреждение AH00558 само по себе не означает, что сайты недоступны. - Добавьте директиву ServerName в основной конфигурационный файлНа Debian/Ubuntu создайте отдельный файл конфигурации Apache для глобального
ServerName, например/etc/apache2/conf-available/servername.conf, с единственной строкойServerName example.ruпосле подстановки реального имени. Сначала проверьте, что такой файл ещё не подключён и нет другой глобальной директивы; на RHEL путь конфигурации и способ подключения иные. - Убедитесь, что имя хоста разрешается через /etc/hostsЕсли
hostname -fне возвращает ожидаемое имя, проверьте DNS и содержимое/etc/hosts, но не добавляйте к реальному внешнему IP выдуманное соответствие. Для устранения AH00558 достаточно корректного глобальногоServerName; изменение системного hostname не требуется и может повлиять на почту, журналы и другие службы. - Проверьте синтаксис и перезагрузите конфигурациюНа Debian выполните
sudo a2enconf servername, затемsudo apache2ctl configtestи приSyntax OK—sudo systemctl reload apache2. На других системах используйтеapachectl configtestи имя службыhttpd; не смешивайте пути и команды двух дистрибутивов. - Проверьте, что сообщение исчезлоПовторите
apachectl -Sилиapache2ctl -Sи проверьте, что предупреждение AH00558 исчезло, при этом список виртуальных хостов сохранился. Откройте сайт по обычному имени: глобальныйServerNameне заменяет отдельныеServerNameкаждого виртуального хоста. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Проверка результата
Выполните sudo apache2ctl configtest: вместо предупреждения должно появиться Syntax OK. Если сообщение осталось, найдите другой ServerName без значения или файл, подключённый позже основного. Команда grep -R "ServerName" /etc/apache2/ покажет все определения, чтобы убрать дублирование и конфликты.
#Почему важно не только заглушить сообщение
Корректное имя сервера влияет на редиректы: когда запрос приходит без заголовка Host или к неизвестному имени, Apache формирует адрес для перенаправления на основе ServerName. Если там остался 127.0.1.1, при добавлении слэша к каталогу посетитель может быть направлен на внутренний адрес. Для проверки выполните curl -I http://IP-сервера/каталог и посмотрите заголовок Location: в нём должно быть реальное имя, а не локальный IP. Если вы управляете несколькими сайтами, глобальное имя можно указать нейтральное (имя самого сервера), а у каждого виртуального хоста задать собственное.
Для серверов без домена допустимо ServerName localhost: сообщение исчезнет, а работа сайтов не изменится.