При настройке сервера 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.
#
Но после создания виртуальных хостов сервер больше не отвечает.
Как заставить главный сервер обслуживать эти страницы в качестве сервера по умолчанию, как сказано выше?
На протяжении многих лет мне часто задавали этот вопрос, и когда я пытаюсь объяснить это некоторым клиентам, они иногда спорят со мной по этому поводу, потому что он действительно появляется (и может на самом деле заявить решительно - это немного двусмысленно в этом отношении). учитывать), что главный сервер должен обслуживаться со всеми этими конфигурациями как с собственными, и установить эти значения по умолчанию для всех последующих виртуальных хостов.
По этой причине я часто включаю что-то вроде следующего в файл 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!
Итак, чтобы прояснить и резюмировать, вы можете заметить, что некоторые из файлов конфигурации по умолчанию / исходные имеют определенныйдефолт'в тегах VirtualHost, но они предназначены только для виртуальных хостов на основе IP - вот почему в документации 2.4 об этом не упоминается в документации по виртуальному хостингу на основе имени, поэтому вы ничего там не упускаете, это просто не имеет отношения к имени на базе виртуального хостинга.
Вы можете подумать, что, поскольку «Главный хост уходит», когда вы снова дублируете некоторые или все директивы для него в контексте первого контейнера VirtualHost, вы получите ошибки о дубликатах - но вы этого не сделаете, это совершенно законно и ожидается, что вы будете или можете продублировать это, чтобы создать первый (и в силу того, что он первый, также "по умолчанию") виртуальный хост. Другие дублирования в ваших файлах conf заставят сервер выдавать жалобы, но не в этом конкретном и особом случае.
Итак, вы можете спросить себя:
«Поскольку я создал контейнеры виртуальных хостов, как насчет всех тех значений по умолчанию, которые были у основного сервера? Нужно ли мне указывать их снова и снова?»
Нет, ты не. Эти специфические аспекты «главного сервера» и других директив в httpd.conf фактически настроены и установлены по умолчанию для любых последующих виртуальных хостов, которые вы создаете - это только сам главный сервер (администратор сервера, имя сервера и т. Д.), Который требуется для повторения и определения в контексте контейнера VirtualHost.
Это можно было бы лучше прояснить во включенных комментариях httpd.conf, но это не было и, по крайней мере, кажется вводящим в заблуждение - так что нет, вы не сумасшедший, сервер должен был ответить таким образом.
Вот ссылки, включенные в закомментированный блок кода выше для удобства:
Главный сервер уходит (документы Apache 2.4): https://httpd.apache.org/docs/current/vhosts/name-based.html#defaultvhost
"дефолт"server - объяснение использования виртуальных серверов на основе имени и IP: разница между _default _: * и *: * в контексте VirtualHost
Я надеюсь, что эти вопросы и ответы помогут некоторым людям, потому что требуется немного покопаться в документации Apache, прежде чем вышеуказанные концепции станут кристально ясными, но я должен отметить, что системный администратор получает предупреждение в самом начале файла httpd.conf в rtfm, а НЕ просто начинать настраивать вещи в этом файле, прежде чем понимать, что делает каждый из этих параметров;)
Наслаждайтесь!