Добавить в корзинуПозвонить
Найти в Дзене
Осваиваю IT с нуля

Как Apache различает сайты на одном сервере и одном IP-адресе?

Когда пользователь вводит адрес сайта в браузере и нажимает Enter, он
ожидает, что нужная страница загрузится мгновенно. Однако за этим
простым действием скрывается сложный процесс, включающий множество
этапов. В этой статье мы разберём, что происходит на каждом этапе
запроса и каким образом веб-сервер Apache может различать несколько
сайтов, размещённых на одном сервере с одним IP-адресом. Современные веб-серверы, включая Apache, поддерживают технологию
виртуального хостинга по именам (Name-based Virtual Hosting). Это
позволяет размещать несколько сайтов на одном IP-адресе и одном сервере.
Сервер различает сайты благодаря заголовку Host, который передаётся
браузером в HTTP-запросе. Ранее, когда интернет только развивался, каждому сайту требовался
отдельный IP-адрес. Однако с ростом количества сайтов стало очевидно,
что такой подход не масштабируем. Тогда появилась концепция виртуального
хостинга, которая позволила одному серверу обслуживать множество сайтов
без необходимо
Оглавление

Когда пользователь вводит адрес сайта в браузере и нажимает Enter, он
ожидает, что нужная страница загрузится мгновенно. Однако за этим
простым действием скрывается сложный процесс, включающий множество
этапов. В этой статье мы разберём, что происходит на каждом этапе
запроса и каким образом веб-сервер Apache может различать несколько
сайтов, размещённых на одном сервере с одним IP-адресом.

Виртуальный хостинг по именам в Apache

Современные веб-серверы, включая Apache, поддерживают технологию
виртуального хостинга по именам (Name-based Virtual Hosting). Это
позволяет размещать несколько сайтов на одном IP-адресе и одном сервере.
Сервер различает сайты благодаря заголовку Host, который передаётся
браузером в HTTP-запросе.

Почему это важно?

Ранее, когда интернет только развивался, каждому сайту требовался
отдельный IP-адрес. Однако с ростом количества сайтов стало очевидно,
что такой подход не масштабируем. Тогда появилась концепция виртуального
хостинга, которая позволила одному серверу обслуживать множество сайтов
без необходимости выделять каждому отдельный IP-адрес.

Теперь разберём пошагово, что происходит от момента ввода адреса
сайта в браузере до отображения страницы на экране пользователя.

1. Определение IP-адреса сайта (DNS-запрос)

Когда пользователь вводит site1.ru в адресную строку браузера и
нажимает Enter, браузеру необходимо узнать, какой IP-адрес соответствует
этому домену. Для этого он выполняет следующие действия:

  • Проверяет, есть ли IP-адрес site1.ru в локальном кеше (ранее посещённые сайты могут сохраняться для ускорения загрузки).
  • Если IP-адреса нет в кеше, браузер отправляет запрос к DNS-серверу (системе доменных имён).
  • DNS-сервер выполняет поиск в своей базе и возвращает браузеру IP-адрес, например:

site1.ru → 192.168.1.100

Теперь браузер знает, куда отправлять запрос.

2. Установление соединения с сервером (TCP и TLS)

Теперь, когда браузер знает IP-адрес, он должен установить соединение с сервером. Этот процесс включает несколько шагов:

Создание TCP-соединения

Браузер отправляет запрос на установление соединения с сервером
192.168.1.100 по порту 80 (HTTP) или 443 (HTTPS). Этот процесс известен
как трёхстороннее рукопожатие (Three-Way Handshake) и состоит из
следующих шагов:

  • Браузер отправляет SYN (synchronize) пакет серверу.
  • Сервер отвечает SYN-ACK (synchronize-acknowledge).
  • Браузер отправляет ACK (acknowledge), подтверждая соединение.

Установление TLS-соединения (если используется HTTPS)

Если сайт работает по HTTPS, то после установления TCP-соединения
начинается обмен сертификатами SSL/TLS, обеспечивающими шифрование
передачи данных. Этот процесс включает:

  • Сервер отправляет браузеру цифровой сертификат.
  • Браузер проверяет подлинность сертификата с помощью центра сертификации (CA).
  • Если сертификат действителен, устанавливается зашифрованный канал связи.

Теперь браузер готов отправить HTTP-запрос к серверу.

3. Отправка HTTP-запроса

Когда соединение установлено, браузер отправляет HTTP-запрос к серверу. Этот запрос содержит:

  • Метод запроса (Request Method) – например, GET (получение страницы) или POST (отправка данных формы).
  • URL-адрес (Uniform Resource Locator) – путь к ресурсу, например, /index.html.
  • Заголовки запроса (Request Headers)
    дополнительные параметры, такие как тип браузера (User-Agent), язык
    (Accept-Language) и, самое важное в контексте виртуального хостинга,
    заголовок Host:

Host: site1.ru

Этот заголовок сообщает серверу, для какого домена запрашивается страница.

Тело запроса (Request Body) – если это, например, POST-запрос, то в теле передаются отправленные данные.

Теперь сервер получил запрос и должен определить, какой сайт обслуживать.

4. Обработка запроса сервером

Когда сервер Apache получает HTTP-запрос, он анализирует заголовки и
определяет, как обработать этот запрос. Последовательность действий
следующая:

  • Сервер проверяет конфигурацию виртуальных хостов. Apache просматривает список сайтов, настроенных в файле конфигурации (/etc/apache2/sites-enabled/ на Ubuntu или /etc/httpd/conf.d/ на CentOS) и ищет соответствие по ServerName или ServerAlias.

<VirtualHost *:80>
ServerName site1.ru
DocumentRoot /var/www/site1
</VirtualHost>

<VirtualHost *:80>
ServerName site2.ru
DocumentRoot /var/www/site2
</VirtualHost>

  • Определение корневой директории сайта. Найдя соответствие Host: site1.ru, Apache устанавливает DocumentRoot как /var/www/site1.
  • Запускается обработка файлов. Apache проверяет наличие index.html или index.php в корневой директории.
  • Передача запроса к обработчику (если требуется).
    Если это статический файл, он отдается браузеру. Если это динамический
    контент (например, PHP), запрос передаётся интерпретатору (например,
    PHP-FPM).
  • Формирование HTTP-ответа. Сервер собирает данные, добавляет заголовки (Content-Type, Content-Length и другие) и отправляет их браузеру.

5. Отображение страницы в браузере

После получения HTTP-ответа браузер выполняет следующие действия:

  • Анализирует HTML-код. Определяет, какие ресурсы (CSS, JavaScript, изображения) необходимы.
  • Отправляет дополнительные запросы. Например, загружает стили и скрипты.
  • Рендерит страницу. Браузер отрисовывает страницу, применяя стили и выполняя скрипты.
  • Отображает контент пользователю. Теперь сайт полностью загружен и отображён на экране.

Заключение

Благодаря механизму виртуального хостинга Apache способен различать
сайты, даже если они работают на одном сервере и одном IP-адресе. Это
достигается за счёт заголовка Host, передаваемого
браузером. Теперь, понимая эту цепочку, можно уверенно настраивать
веб-сервер и управлять несколькими сайтами с одного сервера.