Вопрос: Как 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
...

Это и пример config, аналогичный тому, что у меня сейчас (у меня нет имени домена на данный момент).

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

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


51
2017-07-02 14:00


Источник


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


Ответы:


Подумайте об этом так:

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

88
2017-07-02 14:07



Итак, если хост-часть HTTP-запроса www.example.com, DNS разрешит IP-адрес для этого имени, а часть хоста HTTP-запроса будет фактически IP; при достижении сервера apache также будет знать, что запрос, запрошенный www.example.com и если есть ServerName или ServerAlias директива для этого имени домена, она может служить корнем документа? - njp
Нет - часть запроса HTTP по-прежнему является именем хоста. Я уточню немного больше. - Jenny D
Это здорово, спасибо! - njp
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 - S.M.Mousavi


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

14
2017-07-02 14:13