не удается достоверно определить полное доменное имя сервера
26 сентября, 2020 12:02 пп 20 454 views | Комментариев нетLAMP Stack | Amber | Комментировать запись
Эта серия мануалов поможет вам предотвратить или устранить самые распространенные ошибки, которые возникают при работе с веб-сервером Apache.
Каждый мануал в этой серии включает описание распространенных ошибок Apache, связанных с конфигурацией, сетью, файловой системой или привилегиями.
Ошибка конфигурации Apache «AH00558: Could not reliably determine the server’s fully qualified domain name» возникает, когда в настройках Apache нет глобальной директивы ServerName. Сообщение в основном предназначено для информирования, и сама по себе ошибка AH00558 не помешает правильной работе Apache.
В этом мануале вы узнаете, как применить алгоритм, описанный в руководстве Устранение общих ошибок Apache, чтобы обнаружить AH00558.
Примечание: Если вы уже определили, что на вашем сервере Apache появляется ошибка AH00558, вы можете пропустить разделы по поиску неполадок и сразу перейти к последнему разделу этого мануала, чтобы установить глобальную директиву ServerName.
Поиск ошибки с помощью systemctl
Первый шаг при устранении AH00558 – это проверить статус Apache с помощью systemctl. Вывод systemctl часто содержит всю информацию, необходимую для исправления ошибки.
В дистрибутивах Ubuntu и Debian запустите следующую команду, чтобы проверить статус Apache:
sudo systemctl status apache2.service -l --no-pager
В CentOS, Fedora и других системах, производных от RedHat, используйте эту команду:
sudo systemctl status httpd.service -l --no-pager
Флаг -l выводит все содержимое строки без сокращений (без замены длинных строк многоточием (…)).
Флаг –no-pager выводит весь лог на ваш экран, не вызывая инструмент less, который показывает только один экран контента за раз.Вы должны получить такой вывод:
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Wed 2020-07-29 14:30:03 UTC; 33min ago
Process: 34 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 46 (apache2)
Tasks: 55 (limit: 2344)
CGroup: /system.slice/apache2.service
├─46 /usr/sbin/apache2 -k start
├─47 /usr/sbin/apache2 -k start
└─48 /usr/sbin/apache2 -k start
Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server...
Jul 29 14:30:03 68e2cf19f3f1 apachectl[34]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Обратите внимание на выделенную строку, содержащую сообщение об ошибке AH00558. По сути, она говорит вам, что Apache не смог найти валидную директиву ServerName в своем конфигурационном файле, поэтому он будет использовать первый обнаруженный IP-адрес. В данном примере это внешний IP-адрес сервера: 172.17.02. В вашем случае IP-адрес может быть другим, это также может быть человекочитаемое DNS-имя.
Если ваш вывод systemctl предлагает вам любое автоматически определяемое значение IP-адреса или хоста, перейдите к последнему разделу этого руководства, чтобы установить глобальную директиву ServerName и решить проблему (этот раздел поможет установить для Apache безопасное значение ServerName по умолчанию, используя IP-адрес localhost: 127.0.0.1).
Если в выходных данных systemctl не указано значение, которое можно использовать для директивы ServerName, в следующем разделе этого мануала мы расскажем, как исследовать логи systemd с помощью journalctl для поиска информации о AH00558.
Устранение ошибки с помощью journalctl
Чтобы проверить логи systemd для Apache, воспользуйтесь командой journalctl. При вызове journalctl есть два особых флага, которые помогут вам найти определенные сообщения среди других записей.
Первый флаг, который нужно добавить к journalctl – это флаг –since today. он ограничит вывод команды только теми записями, которые были зарегистрированы в логе с 00:00:00 текущего дня. Использование этой опции поможет ограничить объем выведенных записей, которые вам придется изучить при поиске ошибок.
Второй флаг, который мы советуем использовать, – это опция –no-pager, которую вы применили в systemctl. Она сразу выводит весь лог на экран.
В системах Ubuntu и Debian выполните следующую команду:
sudo journalctl -u apache2.service --since today --no-pager
В CentOS, Fedora и других RedHat-подобных системах используйте эту команду:
sudo journalctl -u httpd.service --since today --no-pager
Если на вашем сервере Apache есть ошибка AH00558, просмотрите вывод journalctl и найдите такую строку:
-- Logs begin at Wed 2020-07-29 14:30:02 UTC, end at Wed 2020-07-29 14:45:03 UTC. --
. . .
Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Starting The Apache HTTP Server...
Jul 29 14:30:03 68e2cf19f3f1 apachectl[34]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Jul 29 14:30:03 68e2cf19f3f1 systemd[1]: Started The Apache HTTP Server.
Вторая строка вывода – это сообщение об ошибке AH00558. Строка содержит внешний IP-адрес сервера, который Apache автоматически определяет и устанавливает по умолчанию во время выполнения. Получив это сообщение как подтверждение ошибки AH00558, вы можете перейти к настройке глобальной директивы ServerName для решения проблемы.
В следующем разделе мы расскажем, как диагностировать ошибку AH00558 с помощью команды apachectl.
Поиск ошибки с помощью apachectl
Ошибка AH00558 может быть обнаружена с помощью утилиты Apache apachectl. Она может перехватывать подобные сообщения перед перезагрузкой или перезапуском Apache, и вам не придется искать ошибки в логах systemctl и journalctl.
Чтобы проверить конфигурацию Apache на наличие ошибки AH00558, выполните следующую команду:
sudo apachectl configtest
Вы должны получить следующий вывод, если на вашем сервере действительно есть ошибка AH00558:
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Как и в предыдущих разделах этого мануала, в которых для поиска сообщений AH00558 использовались systemctl и journalctl, здесь важно найти строку, содержащую сообщение AH00558. Еще раз обратите внимание, что IP-адрес (172.17.0.2) у вас может отличаться.
В следующем разделе мы поможем установить директиву ServerName для устранения сообщений об ошибках AH00558.
Установка глобальной директивы ServerName
Чтобы устранить ошибку AH00558, необходимо добавить директиву ServerName в конфигурацию Apache. Apache использует директиву ServerName для сопоставления входящих HTTP-запросов с IP-адресом или именем DNS хоста (с помощью директив VirtualHost) для обработки запросов нескольких сайтов, размещенных в рамках одного сервера.
В сообщении об ошибке отмечается, что также нужно установить глобальную директиву ServerName. С ее помощью Apache сможет корректно обрабатывать входящие запросы, которые не сопоставляются с VirtualHost, не выдавая при этом дополнительных ошибок.
Для максимальной совместимости с различными конфигурациями Apache используйте для вашей глобальной директивы ServerName значение 127.0.0.1. При необходимости вы можете использовать другой IP-адрес или DNS-имя, соответствующее конфигурации вашего сервера, но безопаснее всего использовать 127.0.0.1.
В системах Ubuntu и Debian откройте файл /etc/apache2/apache2.conf с правами root:
sudo nano /etc/apache2/apache2.conf
Добавьте в конец файла строку ServerName 127.0.0.1:
. . .
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
ServerName 127.0.0.1
В CentOS, Fedora и других системах RedHat откройте файл /etc/httpd/conf/httpd. conf с правами root:
sudo nano /etc/httpd/conf/httpd.conf
Добавьте строку ServerName 127.0.0.1 в конец файла:
. . .
# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
ServerName 127.0.0.1
Сохраните и закройте файл, когда закончите.
После добавления директивы ServerName в конфигурацию запустите apachectl, чтобы проверить ошибки в обновленной конфигурации веб-сервера.
sudo apachectl configtest
Если apachectl не обнаружила ошибок в конфигурации, вы увидите:
Syntax OK
Теперь вы можете перезапустить Apache, используя соответствующую команду systemctl restart для вашего дистрибутива Linux.
В системах Ubuntu и Debian запустите:
sudo systemctl restart apache2.service
В системах CentOS, Fedora и RedHat используйте эту команду:
sudo systemctl restart httpd. service
После перезапуска Apache сообщение об ошибке AH00558 больше не будет отображаться в ваших логах. Вы можете убедиться, что сообщения исчезли, выполнив любую из трех команд systemctl, journalctl или apachectl, которые мы использовали ранее в этом руководстве.
Заключение
В этом мануале вы познакомились с ошибкой AH00558: Could not reliably determine the server’s fully qualified domain name. Хотя эти сообщения не препятствуют запуску Apache, их можно устранить, установив глобальную директиву ServerName.
Вы узнали, как искать сообщения об ошибках AH00558 с помощью команд systemctl, journalctl и apachectl и как отредактировать конфигурацию Apache в различных дистрибутивах Linux, чтобы эти сообщения больше не отображались.
Если вы хотите узнать больше о том, как Apache использует директивы ServerName, обратитесь к документации Apache.
Tags: Apache, apachectl, CentOS, Debian, Fedora, journalctl, systemctl, UbuntuПоддержка виртуального хоста на основе имени — Apache HTTP Server версии 2.
4 Поддержка виртуального хоста на основе имени — Apache HTTP Server версии 2.4Apache HTTP Server версии 2.4
Apache > HTTP-сервер > Документация > Версия 2.4 > Виртуальные хосты
Доступные языки: de | ru | фр | я | ко | tr
В этом документе описывается, когда и как использовать виртуальные хосты на основе имени.
- Виртуальные хосты на основе имени и на основе IP
- Как сервер выбирает правильный виртуальный хост на основе имени
- Использование виртуальных хостов на основе имен
См. также
- Поддержка виртуальных хостов на основе IP
- Подробное обсуждение сопоставления виртуальных хостов
- Динамически настроенный массовый виртуальный хостинг
- Примеры виртуальных хостов для общих настроек
- Комментарии
7 виртуальных хостов на основе IP использовать IP-адрес подключения к определить правильный виртуальный хост для обслуживания. Поэтому вам нужно иметь отдельный IP-адрес для каждого хоста.
При виртуальном хостинге на основе имени сервер полагается на клиента для сообщить имя хоста как часть заголовков HTTP. Используя эту технику, один и тот же IP-адрес может использоваться многими разными хостами.
Виртуальный хостинг на основе имени обычно проще, так как вам нужно только настройте свой DNS-сервер для сопоставления каждого имени хоста с правильным IP-адрес, а затем настройте HTTP-сервер Apache для распознавания разные имена хостов. Виртуальный хостинг на основе имени также упрощает спрос на дефицитные IP-адреса. Поэтому вы должны использовать виртуальный хостинг на основе имени, если вы не используете оборудование который явно требует хостинга на основе IP. Исторические причины Виртуальный хостинг на основе IP, основанный на клиентской поддержке, больше не применимо к веб-серверу общего назначения.
Виртуальный хостинг на основе имени строится на основе виртуального хоста на основе IP алгоритм выбора, означающий, что ищет правильное имя сервера происходят только между виртуальными хостами, которые имеют лучший IP-адрес.
Важно понимать, что первый шаг к созданию виртуальных разрешение хоста — это разрешение на основе IP. Виртуальный хост на основе имени разрешение выбирает только наиболее подходящий виртуальный хост на основе имени после сужения кандидатов до лучшего совпадения на основе IP. Использование подстановочного знака (*) для IP-адреса во всех директивах VirtualHost делает это Отображение на основе IP не имеет значения.
При поступлении запроса сервер найдет наилучшее (наиболее конкретное) соответствие
аргумент на основе
IP-адрес и порт, используемые запросом. Если имеется более одного виртуального хоста
содержащий эту комбинацию адреса наилучшего совпадения и порта, Apache
сравните директивы ServerName
и ServerAlias
с именем сервера
присутствует в запросе.
Если опустить ServerName
директивы с любого виртуального хоста на основе имени, сервер по умолчанию
на полное доменное имя (FQDN), полученное из системного имени хоста. Это неявно заданное имя сервера может привести к нелогичному виртуальному хосту.
соответствует и не рекомендуется.
Виртуальный хост по умолчанию на основе имени для комбинации IP-адреса и порта
Если в наборе виртуальные хосты, содержащие наиболее конкретный соответствующий IP-адрес и порт комбинация, затем первый указанный виртуальный хост , который спички, которые будут использоваться.
Первым шагом является создание блока
для
каждый отдельный хост, который вы хотели бы обслуживать. Внутри каждого
вам понадобится как минимум ServerName
директива для назначения
какой хост обслуживается и DocumentRoot
директива, чтобы показать, где в файловой системе содержимое для этого хоста
жизни.
Главный хост уходит
Любой запрос, не соответствующий существующему
, обрабатывается глобальным
конфигурации сервера, независимо от имени хоста или имени сервера.
При добавлении виртуального хоста на основе имени к существующему серверу и
аргументы виртуального хоста соответствуют ранее существовавшим комбинациям IP и портов,
запросы теперь будут обрабатываться явным виртуальным хостом. В таком случае,
обычно целесообразно создать виртуальный хост по умолчанию
с ServerName
совпадает с именем
базовый сервер. Новые домены на том же интерфейсе и порту, но
требующие отдельных конфигураций, затем могут быть добавлены как последующие (не по умолчанию)
виртуальные хосты.
Наследование ServerName
Лучше всего всегда явно указывать ServerName
в каждом виртуальном хосте на основе имени.
Если VirtualHost
не указывает
a ServerName
, имя сервера будет
наследуется от базовой конфигурации сервера. Если имя сервера не было
указывается глобально, один обнаруживается при запуске через обратное разрешение DNS
первого адреса прослушивания. В любом случае это унаследованное имя сервера
будет влиять на разрешение виртуального хоста на основе имени, поэтому лучше всегда
явно указать ServerName
в каждом
виртуальный хост на основе имени.
Например, предположим, что вы обслуживаете домен www.example.com
и вы хотите добавить виртуальный хост other.example.com
, что указывает на тот же IP-адрес.
Затем вы просто добавляете в httpd.conf
следующее:
# Этот первый виртуальный хост также используется по умолчанию для *:80 Имя сервера www.example.com Псевдоним сервера example.com DocumentRoot "/www/домен" <Виртуальный хост *:80> Имя_сервера other.example.com DocumentRoot "/www/otherdomain"
Вы также можете указать явный IP-адрес вместо *
в директивах
. Например, вы можете захотеть сделать это
чтобы запустить несколько виртуальных хостов на основе имени на одном IP-адресе, и либо
На основе IP или другой набор виртуальных хостов на основе имени по другому адресу.
Многие серверы хотят быть доступны более чем по одному имени. Это
возможно с ServerAlias
директива, помещенная внутри Раздел
. Например, в первом блоке
выше, Директива ServerAlias
указывает, что
перечисленные имена — это другие имена, которые люди могут использовать, чтобы увидеть то же самое
веб-сайт:
ServerAlias example.com *.example.com
, то запросы для всех хостов в домене example.com
будут
обслуживаться виртуальным хостом www.example.com
. Подстановочный знак
символов *
и ?
можно использовать для сопоставления имен.
Конечно, вы не можете просто придумать имена и поместить их в ServerName
или ServerAlias
. Вы должны
сначала правильно настройте DNS-сервер для сопоставления этих имен с IP-адресом
адрес, связанный с вашим сервером.
Виртуальные хосты на основе имен для наиболее подходящего набора из
s обработаны
в том порядке, в котором они указаны в конфигурации. Первое совпадение ServerName
или ServerAlias
используется без другого приоритета для подстановочных знаков
(ни для ServerName против ServerAlias).
Полный список имен в VirtualHost
директива обрабатывается так же, как (без подстановочного знака) Псевдоним сервера
.
Наконец-то можно точно настроить конфигурацию виртуальных хостов
путем размещения других директив внутри контейнеров
. Большинство директив могут быть
помещается в эти контейнеры и затем изменит конфигурацию только
соответствующий виртуальный хост. Чтобы узнать, разрешена ли конкретная директива,
проверить контекст
директива. Директивы конфигурации, установленные в основной контекст сервера (вне любого
контейнер) будут использоваться только в том случае, если они не переопределены виртуальным хостом.
настройки.
Обратите внимание:
Это не раздел вопросов и ответов. Комментарии, размещенные здесь, должны указывать на предложения по улучшению документации или сервера и могут быть удалены нашими модераторами, если они реализованы или считаются недействительными/не по теме. Вопросы о том, как управлять HTTP-сервером Apache, следует направлять либо на наш IRC-канал #httpd, на Libera.chat, либо в наши списки рассылки.
apache 2.2 — Разница между ServerName и ServerAlias
Одно ключевое различие, которое я обнаружил экспериментально (исходя из необходимости), заключается в том, что при использовании поддоменов с подстановочными знаками (например, «*.mycompany.com» и «*.mycompany. net»), то подстановочный знак должен быть указан как ServerAlias, а не ServerName.
Я не пробовал это с не-SSL, но с SSL это было так (для меня). Я остановился на конфигурации:
Listen *:8443 NameVirtualHost *:8443 SSLStrictSNIVHostОтметить <Виртуальный хост *:8443> Имя сервера mycompany.com Псевдоним сервера *.mycompany.com ... <Виртуальный хост *:8443> имя_сервера mycompany. net Псевдоним сервера *.mycompany.net ...
При использовании «ServerName *.mycompany.net» всегда использовался первый виртуальный хост. Это был не только сертификат, но и переписываемая логика.
Вполне возможно, что это происходит только с SSL, так как происходит целая куча других вещей — как указано в SSL с виртуальными хостами, использующими SNI и многими потоками ServerFault. Следуя всем советам в них, это был последний аспект, царапающий голову.
Я зашел в эту ветку, чтобы попытаться самому понять, почему была разница, и признаться, я приближаюсь, но не совсем понимаю.
В моем случае ServerName, кажется, делает немного меньше (не обнаруживается при поиске виртуального хоста), а не больше.
Запуск «apacectl -S | httpd -S» в соответствии с советом Иана дает:
подстановочный знак NameVirtualHosts и серверы _default_: *:8443 — это NameVirtualHost сервер по умолчанию mycompany.com (/etc/httpd/conf/httpd. conf:1100) порт 8443 namevhost mycompany.com (/etc/httpd/conf/httpd.conf:1100) дикий псевдоним *.mycompany.com порт 8443 namevhost mycompany.net (/etc/httpd/conf/httpd.conf:1164) дикий псевдоним *.mycompany.net
Редактировать: (добавление ServerName с подстановочным знаком для полноты)
подстановочный знак NameVirtualHosts и серверы _default_: *:8443 — это NameVirtualHost сервер по умолчанию *.mycompany.com (/etc/httpd/conf/httpd.conf:1040) порт 8443 namevhost *.mycompany.com (/etc/httpd/conf/httpd.conf:1040) порт 8443 namevhost *.mycompany.net (/etc/httpd/conf/httpd.conf:1105)
Примечание: слово «дикий» в строке псевдонима в первом случае (с использованием ServerAlias) исходит от apache и не отображается во втором (с использованием ServerName) — я подозреваю, что это важно.
Кроме того, если я удалю «ServerName» из второго виртуального хоста и просто использую псевдоним, следуя совету «должно быть только одно имя сервера», то запрос немного теряется — похоже, он автоматически перенаправляется на «https://test.