Когда браузер открывает сайт, запрос сначала попадает не на сам сайт, а на веб-сервер — программу, которая принимает входящие соединения, решает, что с ними делать, и отдаёт готовый ответ. Эта статья объясняет, что такое веб-сервер, чем отличаются популярные реализации и как он связан с остальным стеком сайта. Понимание этой роли помогает быстрее находить причину проблем, когда сайт отвечает ошибкой или долго не загружается.
Что происходит, когда вы открываете сайт
За доли секунды между вводом адреса и появлением страницы происходит несколько шагов.
- Браузер находит IP-адрес сервера по доменному имени через DNS.
- Браузер открывает TCP-соединение с сервером на порту 80 или 443.
- Веб-сервер принимает запрос и решает, какой файл отдать или какой обработчик вызвать.
- Сервер формирует ответ и отправляет его обратно браузеру, который отрисовывает страницу.
Веб-сервер как программа: что он делает
Веб-сервер — это программа, которая слушает сетевой порт, принимает HTTP-запросы и по заданным правилам возвращает содержимое: статический файл, результат работы другой программы или ошибку, если запрошенного ресурса нет. Помимо самой раздачи файлов, веб-сервер обычно отвечает за сжатие ответов, кеширование статики, ограничение скорости и перенаправление запросов на правильный обработчик. Эти функции можно включать и настраивать по отдельности, не меняя код самого сайта.
Популярные веб-серверы и их различия
Проверить состояние установленного веб-сервера и корректность его конфигурации можно стандартными командами.
systemctl status nginx
nginx -t
Разные веб-серверы по-разному обрабатывают одновременные соединения: одни используют по потоку на каждое соединение, другие — событийную модель с небольшим числом рабочих процессов. Порядок установки и базовой настройки одного из самых распространённых веб-серверов описан в статье настройка nginx. Выбор конкретной реализации редко критичен для небольшого сайта, но становится важным при росте нагрузки.
Веб-сервер и остальной стек: куда он передаёт запросы
Веб-сервер редко работает в одиночку. Запросы к статическим файлам он обычно отдаёт сам, а запросы, требующие выполнения кода сайта, передаёт дальше — интерпретатору PHP, серверу приложений или базе данных, и уже их ответ возвращает браузеру. Как собрать типовой стек из веб-сервера, обработчика PHP и базы данных на одном сервере, описано в статье установка LEMP.
Сравнение подходов к обработке соединений
| Подход | Как обрабатываются соединения | Сильная сторона |
|---|---|---|
| Процесс на соединение | Отдельный процесс или поток на каждое соединение | Простая модель обработки запросов |
| Событийная модель | Небольшое число процессов обслуживает много соединений | Экономия памяти при высокой нагрузке |
| Обратный прокси | Сервер передаёт запрос другому обработчику | Разделение статики и динамики |
| Встроенное кеширование | Повторные запросы отдаются из кеша без обращения к бэкенду | Снижение нагрузки на приложение |
На практике веб-сервер обычно сочетает несколько подходов сразу: кеширует статику, одновременно работает как обратный прокси и обрабатывает соединения по событийной модели.
Что делать: как выбрать и настроить веб-сервер
- Определите тип нагрузки: много статики, много динамических запросов или смешанный профиль.
- Выберите веб-сервер с подходящей моделью обработки соединений под эту нагрузку.
- Настройте передачу динамических запросов на обработчик приложения и кеширование статики.
- Проверьте конфигурацию на синтаксические ошибки перед применением на боевом сервере.
- Если текущий веб-сервер не справляется с нагрузкой, рассмотрите переход на другой — порядок миграции описан в статье миграция с Apache на nginx.
Такой порядок действий подходит и для нового проекта, и для сайта, который уже работает и начал заметно медленнее отвечать под нагрузкой.
Частые вопросы
Чем веб-сервер отличается от хостинга?
Хостинг — это место и оборудование, где размещён сайт, а веб-сервер — программа на этом оборудовании, которая непосредственно принимает запросы браузера и отдаёт ответы.
Можно ли использовать несколько веб-серверов для одного сайта?
Да, часто один веб-сервер работает как обратный прокси перед другим: например, принимает все внешние соединения и распределяет их между внутренними серверами приложения.
Нужен ли веб-сервер для статического сайта без динамики?
Да, даже сайту из обычных HTML-файлов нужна программа, которая слушает порт и отдаёт эти файлы браузеру по запросу — это и есть веб-сервер.