Apache HTTP Server 2.4 | Підтримка віртуального хоста на основі імені: Code Examples

  1. Віртуальні хости на основі імен та віртуальних хостів на базі IP
  2. Як сервер вибирає власний віртуальний хост на основі імені
  3. За замовчуванням іменований vhost для комбінації IP і портів
  4. Використання віртуальних хостів на основі імені

У цьому документі описується, коли і як використовувати віртуальні хости на основі імен.

Віртуальні хости на основі імен та віртуальних хостів на базі IP

Віртуальні хости на базі IP використовують IP-адреса з'єднання для визначення правильного віртуального хоста для обслуговування. Тому вам потрібно мати окремий IP-адресу для кожного хоста.

При використанні віртуального хостингу на основі імені сервер покладається на клієнта, щоб повідомити ім'я хоста як частина заголовків HTTP. Використовуючи цей метод, багато різні хости можуть використовувати один і той же IP-адресу.

Віртуальний хостинг на основі імені зазвичай простіше, так як вам потрібно налаштувати ваш DNS-сервер для зіставлення кожного імені хоста з правильним IP-адресою, а потім налаштувати HTTP-сервер Apache для розпізнавання різних імен хостів. Віртуальний хостинг на основі імен також знижує попит на рідкісні IP-адреси. Тому ви повинні використовувати віртуальний хостинг на основі імені, якщо ви не використовуєте обладнання, яке явно вимагає хостинг на основі IP. Історичні причини віртуального хостингу на основі IP на основі підтримки клієнтів більше не застосовні до універсального веб-сервера.

Віртуальний хостинг на основі імені грунтується на алгоритмі вибору віртуального хоста на основі IP, що означає, що пошук правильного імені сервера відбувається тільки між віртуальними хостами, які мають кращий IP-адреса.

Як сервер вибирає власний віртуальний хост на основі імені

Важливо визнати, що перший крок у вирішенні віртуального хоста на основі імен - це дозвіл на основі IP. Дозвіл віртуального хоста на основі імені вибирає найбільш підходящий віртуальний хост на основі імені після звуження кандидатів на кращу відповідність на основі IP. Використання символів узагальнення (*) для IP-адреси у всіх директивах VirtualHost робить це відображення на основі IP неактуальним.

Коли запит надійде, сервер знайде кращий (найбільш конкретний) відповідний аргумент <VirtualHost> на основі IP-адреси і порту, використовуваного в запиті. Якщо є більше одного віртуального хоста, що містить цю адресу найкращої відповідності та комбінації портів, Apache буде додатково порівнювати директиви ServerName і ServerAlias з ім'ям сервера, присутнім в запиті.

Якщо ви опустите директиву ServerName з будь-якого віртуального хоста на основі імені, сервер за замовчуванням буде мати повне доменне ім'я (FQDN), отримане з системного імені хоста. Це неявне завдання імені сервера може привести до зустрічного інтуїтивного порівнянні віртуального хоста і не рекомендується.

За замовчуванням іменований vhost для комбінації IP і портів

Якщо в наборі віртуальних хостів, що містять найбільш підходящий IP-адреса і комбінацію портів, не знайдено жодного відповідного імені сервера або ServerAlias, тоді буде використовуватися перший зазначений віртуальний хост, що відповідає цьому.

Використання віртуальних хостів на основі імені

Перший крок - створити блок <VirtualHost> для кожного іншого хоста, який ви хочете обслуговувати. Усередині кожного блоку <VirtualHost> вам потрібно як мінімум директива ServerName для вказівки того, який хост буде обслуговуватися, і директиву DocumentRoot щоб показати, де в файлової системі знаходиться контент для цього хоста.

Головний господар йде

Будь-який запит, який не відповідає існуючому <VirtualHost> , Обробляється глобальної конфігурацією сервера, незалежно від імені хоста або ServerName.

Коли ви додаєте віртуальний хост на основі імені до існуючого сервера, а аргументи віртуального хоста відповідають існуючим комбінаціям IP і портів, запити тепер будуть оброблятися явним віртуальним хостом. В цьому випадку зазвичай розумно створювати віртуальний хост по замовчуванням з ServerName відповідним базовим сервера. Нові домени на одному інтерфейсі і порту, але вимагають окремих конфігурацій, можуть бути додані як наступні (не за замовчуванням) віртуальні хости.

спадкування сервера

Краще завжди вказувати ServerName в кожному віртуальному хості на основі імені.

якщо <VirtualHost> не вказує ServerName , Ім'я сервера буде успадковано від конфігурації базового сервера. Якщо ім'я сервера не було вказано глобально, одне з них виявляється при запуску через зворотне DNS-дозвіл першого адреси прослуховування. У будь-якому випадку це успадковане ім'я сервера буде впливати на дозвіл віртуального хоста на основі імен, тому краще завжди явно ServerName ім'я сервера на кожному віртуальному хості на основі імені.

Наприклад, припустимо, що ви обслуговуєте домен www.example.com і хочете додати віртуальний хост other.example.com, який вказує на той же IP-адресу. Потім ви просто додаєте наступне в httpd.conf:

<VirtualHost *: 80> # This first-listed virtual host is also the default for *: 80 ServerName www.example.com ServerAlias ​​example.com DocumentRoot "/ www / domain" </ VirtualHost> <VirtualHost *: 80> ServerName other .example.com DocumentRoot "/ www / otherdomain" </ VirtualHost>

Ви також можете вказати явний IP-адреса замість директив * in <VirtualHost> . Наприклад, ви можете зробити це, щоб запустити деякі віртуальні хости на основі імені на одному IP-адресу і або на основі IP, або на іншому наборі віртуальних хостів на основі імені на іншому адресі.

Багато сервери хочуть бути доступними більш ніж одним ім'ям. Це можливо з ServerAlias директиви ServerAlias , Розташованої усередині розділу <VirtualHost> . Наприклад, в першому блоці <VirtualHost> вище, директива ServerAlias вказує, що перераховані імена - це інші імена, які люди можуть використовувати для перегляду того ж веб-сайту:

ServerAlias ​​example.com * .example.com

то запити для всіх хостів в домені example.com будуть обслуговуватися віртуальним хостом www.example.com. Символи узагальнення * і? може використовуватися для зіставлення імен. Звичайно, ви не можете просто створювати імена і розміщувати їх в ServerName або ServerAlias. Спочатку необхідно правильно налаштувати DNS-сервер для зіставлення цих імен з IP-адресою, пов'язаним з вашим сервером.

Віртуальні хости на основі імені для набору максимальної відповідності умовам <VirtualHost> s обробляються в тому порядку, в якому вони відображаються в конфігурації. Використовується перший збіг з ServerName або ServerAlias , Без різного пріоритету для символів узагальнення (а не для ServerName і ServerAlias).

Повний список імен в директиві <VirtualHost> обробляється так само, як (без символів узагальнення) ServerAlias .

Нарешті, ви можете налаштувати конфігурацію віртуальних хостів, розмістивши інші директиви всередині контейнерів <VirtualHost> . Більшість директив можуть бути поміщені в ці контейнери і потім будуть змінювати конфігурацію тільки відповідного віртуального хоста. Щоб дізнатися, чи дозволено будь-яка конкретна директива, перевірте контекст директиви. Директиви конфігурації, встановлені в контексті основного сервера (поза будь-якого контейнера <VirtualHost> ), Будуть використовуватися, тільки якщо вони не перевизначені параметрами віртуального хоста.

Символи узагальнення * і?