Основной сервер Apache не используется по умолчанию, как указано в httpd.conf при создании виртуальных хостов. Почему?

При настройке сервера Apache в разделе "Главный сервер" говорится следующее:

# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

Но сервер больше не отвечает, как только виртуальные хосты созданы.

Как заставить Главный сервер обслуживать эти страницы в качестве сервера по умолчанию, что, как сказано выше, он будет делать?

1 ответ

Решение

В течение многих лет я много раз задавал этот вопрос, и когда я пытаюсь объяснить это некоторым клиентам, они иногда спорят со мной об этом, потому что он действительно появляется (и может даже на самом деле утверждать, что это несколько двусмысленно). учитывать), что главный сервер должен обслуживаться со всеми этими конфигами как своими собственными, и установить эти значения по умолчанию для всех последующих виртуальных хостов.

Из-за этого я часто включаю что-то вроде следующего в файл httpd.conf, чуть ниже, где начинается раздел основного сервера, а также в статьях базы знаний о различных клиентских порталах, которые я поддерживаю. Это помогает (немного) сократить количество заявок на поддержку клиентов VPS, которые в конечном итоге отказываются от попыток настроить поддержку виртуальных хостов на своих серверах httpd:

#                       I know it says above that the main server responds
#                       to ANY requests that aren't handled by a <VirtualHost>
#                       definition - but THIS IS NOT TRUE!!!
#
#                       As you can see below, the "Main Server Goes Away"...
#
#                       From: https://httpd.apache.org/docs/current/vhosts/name-based.html#defaultvhost
#                       (Note that there is no mention in the official Apache docs recommending the
#                       use of a _default_ directive in the <VirtualHost> tag. Hm....
#
# Main host goes away
#
# Any request that doesn't match an existing <VirtualHost> is handled by the
#global server configuration, regardless of the hostname or ServerName.
#
# When you add a name-based virtual host to an existing server, and the virtual
# host arguments match preexisting IP and port combinations, requests will now
# be handled by an explicit virtual host. In this case, it's usually wise to
# create a default virtual host with a ServerName matching that of the base server.
#
# OBSERVATION:  Wise? It's wise? earlier docs (i.e., Apache 2.2 docs) don't put
# it that way - you must, if you want the 'Main Server' to be served.
# Again, _default_ is not mentioned because it should be, and is, only used for a 
# default server in IP based virtual hosting, as clarified here:
# https://faultserver.ru/questions/567320/difference-between-default-and-in-virtualhost-context
#
# <Virtualhost _default_:*> with Servername foo.com : should not be used with name based virtualhosting
#
#               You may proceed now - i.e., You now can haz cheezburgerz!

Таким образом, чтобы уточнить и подвести итог, вы можете заметить, что некоторые из стандартных / исходных файлов conf имеют определенное значение " default " в тегах VirtualHost, но они предназначены только для виртуальных хостов на основе IP - вот почему в документации 2.4 не упоминается это в документации по виртуальному хостингу на основе имен, так что вы ничего не пропустите, это просто не относится к виртуальному хостингу на основе имен.

Вы можете подумать, что, поскольку "Главный хост исчезает", что когда вы дублируете некоторые или все директивы для него снова в контексте первого контейнера VirtualHost, вы будете получать ошибки о дубликатах - но вы не будете, это вполне законно и ожидается, что вы будете или можете дублировать это, чтобы создать первый (и в силу того, что первый, а также "по умолчанию") виртуальный хост. Другие дубликаты в ваших conf-файлах заставят сервер выдавать жалобы, но не в этом конкретном, а в особом случае.

Так что вы можете спросить себя:

"Так как я создал контейнеры виртуального хоста, как насчет всех тех значений по умолчанию, которые были у основного сервера? Нужно ли указывать их снова и снова?"

Нет, ты не. Эти специфические аспекты "главного сервера" и других директив в httpd.conf фактически настроены и установлены как значения по умолчанию для всех последующих виртуальных хостов, которые вы создаете - только сам главный сервер (Server Administrator, ServerName и т. Д.) Нуждается в быть повторенным и определенным в контексте контейнера VirtualHost.

Это могло бы быть лучше разъяснено во включенных комментариях httpd.conf, но это не так, и, по крайней мере, кажется вводящим в заблуждение - так что нет, вы не сумасшедший, сервер должен был ответить таким образом.

Вот ссылки, включенные в приведенный выше блок кода для удобства:

Главный сервер исчезает (документы Apache 2.4): https://httpd.apache.org/docs/current/vhosts/name-based.html

Сервер "по умолчанию " - объяснение использования между виртуальными серверами на основе имен и IP: разница между _default_:* и *:* в контексте VirtualHost

Я надеюсь, что эти вопросы и ответы помогут некоторым людям, потому что требуется немного покопаться в Apache Docs, прежде чем вышеуказанные концепции станут кристально ясными - но я должен отметить, что sysadmin предупрежден в самом начале файла httpd.conf к rtfm, а НЕ к тому, чтобы просто начать настраивать вещи в этом файле, прежде чем понимать, что делает каждый из этих параметров;)

Наслаждайтесь!

Другие вопросы по тегам