Главный сервер 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.
#

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

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

0
задан 5 April 2016 в 23:13
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://serverfault.com/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!

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

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

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

«Поскольку я создал контейнеры виртуального хоста, как насчет всех тех значений по умолчанию, которые на главном сервере? Мне тоже нужно указывать их заново? »

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

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

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

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

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

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

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

1
ответ дан 4 December 2019 в 16:39

Теги

Похожие вопросы