Как работают ServerName и ServerAlias?


62

Это следующая часть конфигурации виртуального хоста, в которой мне нужно больше пояснений:

<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?

Или что-то. Человек я в замешательстве.


1
Вы забыли некоторые слова во втором абзаце. :-)
ThatGraemeGuy

Ответы:


105

Думайте об этом так:

DNS - это телефонный справочник / желтые страницы. Когда кто-то хочет позвонить на ваш телефон, он может найти ваше имя, получить номер вашего телефона и позвонить по этому телефону. DNS делает то же самое, но для компьютеров - когда кто-то хочет перейти к нему, www.example.comони запрашивают IP-адрес в DNS, а затем они могут связаться с компьютером, который имеет этот IP-адрес. Вот что значит решимость . Разрешение IP-адреса не имеет ничего общего с Apache; это строго вопрос DNS.

ServerNameИ ServerAliasбольше похож на внутренний список телефонов компании. Ваш веб-сервер является коммутатором; он будет принимать все входящие соединения с сервером. Затем клиент / вызывающая сторона скажет им, какое имя они ищут, и в конфигурации Apache будет искать способ обработки этого имени.

Если имя не указано как ServerName / ServerAlias ​​в конфигурации apache, apache всегда выдаст им первый перечисленный VirtualHost. Или, если VirtualHost вообще отсутствует, он выдаст одинаковое содержимое независимо от того, какое имя хоста указано в запросе.

ETA: Итак, шаг за шагом для нормального соединения:

  1. Вы вводите http://www.example.comв своем браузере.
  2. Ваш компьютер спрашивает свой распознаватель DNS, какой IP-адрес он должен использовать, когда он хочет поговорить www.example.com.
  3. Ваш компьютер подключается к этому IP-адресу и говорит, что хочет с ним поговорить www.example.com(это Host:заголовок в HTTP).
  4. Веб-сервер просматривает свою конфигурацию, чтобы выяснить, что делать с запросом контента www.example.com. Может произойти любое из следующего:
    • www.example.comуказан как ServerNameили ServerAliasдля VirtualHost- если так, то он будет использовать конфигурацию для этого VirtualHost для доставки контента.
    • На сервере вообще нет виртуальных хостов - если так, то он будет использовать конфигурацию в своем httpd.conf для доставки контента.
    • На сервере есть виртуальные хосты, но они www.example.comне указаны ни в одном из них. В этом случае первый виртуальный хост в списке будет использоваться для доставки контента.

Таким образом, если хост-часть HTTP-запроса - www.example.comэто DNS, он разрешит IP-адрес для этого имени, а хост-часть HTTP-запроса фактически будет IP; по достижении сервера apache также узнает, что запрос был запрошен, www.example.comи если есть директива ServerNameили ServerAliasдля этого доменного имени, он может обслуживать корень документа?
njp

Нет - часть HTTP-запроса по-прежнему является именем хоста. Я уточню немного больше.
Дженни Ди говорит восстановить Монику

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
SMMousavi

19

Если вы не определили имя сервера, apache2 попытается угадать его из / etc / hosts. ServerAlias ​​не является обязательным. Самый обычный случай использования - это где

ServerName example.com
ServerAlias www.example.com

Вам решать (не работа apache2), чтобы убедиться, что запросы достигают IP веб-сервера, например, регистрация домена и настройка записей DNS. Очень распространенный способ сделать это (для тестирования и разработки) без записей домена и DNS - это настроить файл / etc / hosts на вашем локальном компьютере так, чтобы example.com указывал на IP вашего сервера.

192.168.0.12 example.com
192.168.0.12 www.example.com

0

Я настоятельно рекомендую прочитать официальную документацию по этой теме: 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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.