Назад | Перейти на главную страницу

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

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

<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 ​​- это просто записи EXTRA 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 они запрашивают у DNS IP-адрес, а затем могут связаться с компьютером, имеющим этот 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 для доставки контента.
    • На сервере вообще нет VirtualHosts - в таком случае он будет использовать конфигурацию из своего httpd.conf для доставки контента.
    • На сервере есть VirtualHosts, но www.example.com не указан ни в одном из них - в этом случае первый виртуальный хост в списке будет использоваться для доставки контента.

Если вы не определяете ServerName, 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

Я настоятельно рекомендую прочитать официальную документацию по теме: https://httpd.apache.org/docs/2.4/vhosts/name-based.html

это говорит «Если совпадение ServerName или ServerAlias ​​не найдено в наборе виртуальных хостов, содержащем наиболее конкретную совпадающую комбинацию IP-адреса и порта, то будет использован первый из перечисленных виртуальных хостов, который соответствует этому». . Итак, в вашем случае, если вы заходите на «foobar.com», первая запись VirtualHost, которая каким-то образом соответствует IP 141.29.495.999, будет использоваться httpd

В том же документе говорится: «Многие серверы хотят быть доступными под более чем одним именем. Это возможно с помощью директивы ServerAlias». Таким образом, вы можете рассматривать ServerAlias ​​просто как дополнительные записи ServerName.