Як працюють 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 ​​- це в основному записи EXTRA 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них, він запитує 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він не вказаний ні в одному з них - якщо так, перший Virtualhost у списку буде використаний для доставки вмісту.

Отже, якщо хост-частина 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

Якщо ви не визначите 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

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.