Веб-сервер — программа, которая слушает входящие TCP-соединения на порту 80 (HTTP) и 443 (HTTPS), разбирает HTTP-запросы и формирует ответы. Статические файлы (HTML, CSS, JS, изображения) отдаются напрямую с диска. Динамический контент генерируется через FastCGI (PHP-FPM), WSGI (Python), Rack (Ruby) или обратный прокси к приложению на внутреннем порту.
Как обрабатывается запрос
- TCP-соединение установлено; при HTTPS — TLS-рукопожатие (1–2 RTT или 0-RTT при HTTP/3)
- Браузер отправляет запрос:
GET /page.html HTTP/2 Host: example.com - Сервер определяет виртуальный хост по заголовку
Host - Ищет файл по filesystem root или проксирует запрос приложению
- Возвращает ответ: статус-код (200, 301, 404...), заголовки и тело
Для PHP: запрос передаётся через FastCGI-сокет в PHP-FPM. PHP выполняет скрипт, обращается к СУБД, формирует HTML и возвращает его через FastCGI обратно веб-серверу, который отдаёт клиенту.
История
Первый веб-сервер — CERN httpd, запущен Тимом Бернерс-Ли в 1990 году на компьютере NeXT. В 1995 году появился Apache HTTP Server — к 1996 году занял более 50% рынка. Microsoft выпустила IIS в 1995 году для Windows NT. Nginx написал Игорь Сысоев в 2002 году для решения C10K-проблемы (10 000 одновременных соединений при малом потреблении RAM). К 2024 году Nginx занимает около 34% рынка по данным Netcraft, Apache — около 27%.
Популярные веб-серверы
| Сервер | Доля рынка (2024) | Особенности |
|---|---|---|
| Nginx | ~34% | Event-driven, высокая нагрузка, reverse proxy |
| Apache | ~27% | .htaccess, mod_rewrite, модульная архитектура |
| Cloudflare Server | ~22% | Встроен в Cloudflare CDN |
| IIS | ~7% | Windows Server, ASP.NET |
| LiteSpeed / OpenLiteSpeed | ~4% | Drop-in Apache, встроенный LSCache |
| Caddy | <1% | Автоматический HTTPS через Let's Encrypt |
Виды обработки запросов
Prefork MPM (Apache): каждый запрос обрабатывает отдельный процесс. Стабильно, изолировано, но память на каждый процесс 20–50 МБ. Event MPM (Apache) и nginx: event loop обрабатывает множество соединений в одном потоке, keepalive-соединения не блокируют воркеры — меньше RAM при той же нагрузке. При 1 000 одновременных keepalive-соединений nginx потребляет ~2 МБ, Apache prefork — 50+ МБ.
Веб-сервер как reverse proxy
Reverse proxy — конфигурация, при которой веб-сервер проксирует запросы к backend-приложению (Node.js, Python, Go, Java). Nginx передаёт через директиву proxy_pass http://127.0.0.1:3000. Это позволяет фронтенд-серверу обрабатывать SSL, кэшировать статику и сжимать ответы, пока backend занимается только бизнес-логикой.
На что обращать внимание
Выбор веб-сервера влияет на производительность, безопасность и гибкость настройки. Виртуальный хостинг — обычно Apache или LiteSpeed (поддержка .htaccess). VPS под высокую нагрузку — Nginx или Nginx + PHP-FPM. Контейнерные среды — Nginx или Traefik как ingress-контроллер. Caddy — хороший выбор для быстрого старта с автоматическим HTTPS без ручной настройки Certbot.