Это следующая часть конфигурации виртуального хоста, в которой мне нужно больше пояснений:
<VirtualHost *:80>
# Admin email, Server Name (domain name), and any aliases
ServerAdmin example@example.com
ServerName 141.29.495.999
ServerAlias example.com
...
Это и пример конфигурации, похожий на тот, который у меня сейчас есть (у меня нет доменного имени на данный момент).
<VirtualHost *:80>
- Разрешите следующие настройки для всех запросов HTTP, сделанных на порту 80, к IP-адресам, с которыми можно связаться с этим сервером. Например, если к серверу можно получить доступ более чем по одному IP, вы можете ограничить эту директиву только одним вместо обоих.
ServerName
- Если хост-часть HTTP-запроса совпадает с этим именем, разрешите запрос. Обычно это доменное имя, которое сопоставляется с IP, но в этом случае хост HTTP-запроса должен соответствовать этому IP.
ServerAlias
- Альтернативные имена, принятые сервером.
Меня сбивает с толку то, что в приведенном выше сценарии, если я установлю, ServerAlias mytestname.com
а затем сделаю HTTP-запрос mytestname.com
, должна ли быть запись DNS, указывающая на IP-адрес сервера, чтобы это работало? В каком случае ServerAlias в основном ДОПОЛНИТЕЛЬНЫЕ записи ServerName?
Скажем , у меня была запись DNS таким образом, что , foobar.com = 141.29.495.999
но тогда у меня был ServerName = 141.29.495.999
и ServerAlias
был пуст, это означало бы , что , хотя foobar.com получает разрешено к правым IP, потому что нет никакой ссылки принимать foobar.com в ServerName
или ServerAlias
?
Или что-то. Человек я в замешательстве.
Ответы:
Думайте об этом так:
DNS - это телефонный справочник / желтые страницы. Когда кто-то хочет позвонить на ваш телефон, он может найти ваше имя, получить номер вашего телефона и позвонить по этому телефону. DNS делает то же самое, но для компьютеров - когда кто-то хочет перейти к нему,
www.example.com
они запрашивают IP-адрес в DNS, а затем они могут связаться с компьютером, который имеет этот IP-адрес. Вот что значит решимость . Разрешение IP-адреса не имеет ничего общего с Apache; это строго вопрос DNS.ServerName
ИServerAlias
больше похож на внутренний список телефонов компании. Ваш веб-сервер является коммутатором; он будет принимать все входящие соединения с сервером. Затем клиент / вызывающая сторона скажет им, какое имя они ищут, и в конфигурации Apache будет искать способ обработки этого имени.Если имя не указано как ServerName / ServerAlias в конфигурации apache, apache всегда выдаст им первый перечисленный VirtualHost. Или, если VirtualHost вообще отсутствует, он выдаст одинаковое содержимое независимо от того, какое имя хоста указано в запросе.
ETA: Итак, шаг за шагом для нормального соединения:
http://www.example.com
в своем браузере.www.example.com
.www.example.com
(этоHost:
заголовок в HTTP).www.example.com
. Может произойти любое из следующего:www.example.com
указан какServerName
илиServerAlias
дляVirtualHost
- если так, то он будет использовать конфигурацию для этого VirtualHost для доставки контента.www.example.com
не указаны ни в одном из них. В этом случае первый виртуальный хост в списке будет использоваться для доставки контента.источник
www.example.com
это DNS, он разрешит IP-адрес для этого имени, а хост-часть HTTP-запроса фактически будет IP; по достижении сервера apache также узнает, что запрос был запрошен,www.example.com
и если есть директиваServerName
илиServerAlias
для этого доменного имени, он может обслуживать корень документа?The server has VirtualHosts but www.example.com isn't listed in any of them - if so, the first Virtualhost in the list will be used to deliver the content.
, Я проверял это. Это правильно, но я не уверен, что это первый Virtualhost. Спасибо за информацию. +1Если вы не определили имя сервера, apache2 попытается угадать его из / etc / hosts. ServerAlias не является обязательным. Самый обычный случай использования - это где
Вам решать (не работа apache2), чтобы убедиться, что запросы достигают IP веб-сервера, например, регистрация домена и настройка записей DNS. Очень распространенный способ сделать это (для тестирования и разработки) без записей домена и DNS - это настроить файл / etc / hosts на вашем локальном компьютере так, чтобы example.com указывал на IP вашего сервера.
источник
Я настоятельно рекомендую прочитать официальную документацию по этой теме: https://httpd.apache.org/docs/2.4/vhosts/name-based.html.
в нем говорится: «Если в наборе виртуальных хостов, содержащих наиболее специфическую комбинацию IP-адресов и портов, не найдено подходящего ServerName или ServerAlias, то будет указан первый виртуальный хост, который будет использоваться для сопоставления». , Так что в вашем случае, если вы заходите на «foobar.com», первая запись VirtualHost, которая каким-то образом соответствует IP 141.29.495.999, будет использоваться httpd
В том же документе говорится: «Многие серверы хотят быть доступными более чем по одному имени. Это возможно с помощью директивы ServerAlias». Таким образом, вы можете рассматривать ServerAlias просто как дополнительные записи ServerName.
источник