Nginx
Nginx (произносится «энжинкс») — это свободный веб-сервер и обратный прокси-сервер, а также почтовый прокси-сервер и TCP/UDP-прокси общего назначения. Nginx отличается высокой производительностью при обработке большого числа одновременных соединений, низким потреблением памяти и асинхронной архитектурой, основанной на событийно-ориентированной модели. Программное обеспечение разрабатывается и поддерживается компанией Nginx, Inc. (принадлежащей F5 Networks) и распространяется под лицензиями BSD и коммерческой лицензией Nginx Plus.
История
Создание и ранние версии
Разработка Nginx была начата российским программистом Игорем Сысоевым в 2002 году. Основной мотивацией послужила проблема «эффекта C10k» — невозможность существовавших на тот момент веб-серверов (прежде всего Apache HTTP Server) эффективно обрабатывать более 10 000 одновременных соединений на одном сервере из-за их архитектуры, основанной на процессах или потоках. Сысоев спроектировал Nginx с асинхронной, неблокирующей моделью ввода-вывода, что позволило серверу потреблять значительно меньше памяти и ресурсов процессора при высокой нагрузке.
Первая публичная версия Nginx (0.1.0) была выпущена 4 октября 2004 года. Первоначально проект развивался как внутренняя разработка для сайта Rambler, где Сысоев работал системным администратором. В 2005 году исходный код был опубликован под лицензией BSD.
Рост популярности и коммерциализация
К концу 2000-х годов Nginx стал широко использоваться на высоконагруженных сайтах, включая такие крупные проекты, как «ВКонтакте», «Яндекс», Mail.ru, а также зарубежные сервисы (Netflix, WordPress.com, GitHub). В декабре 2009 года была основана компания Nginx, Inc. (Сан-Франциско, США) для коммерческой поддержки проекта и разработки расширенной версии Nginx Plus.
В июне 2011 года Игорь Сысоев выпустил Nginx Unit — легковесный сервер приложений с поддержкой нескольких языков программирования (PHP, Python, Ruby, Java, Go и других).
Поглощение F5 Networks
11 марта 2019 года компания F5 Networks объявила о приобретении Nginx, Inc. за 670 миллионов долларов США. Сделка была закрыта в мае 2019 года. После поглощения разработка Nginx продолжилась, однако часть ключевых разработчиков, включая Игоря Сысоева и Максима Дунина, покинули компанию и основали форк проекта — Freenginx (2024 год), а также присоединились к разработке альтернативного веб-сервера Angie, созданного бывшими сотрудниками Nginx.
Развитие в России
На территории Российской Федерации Nginx является одним из наиболее распространённых веб-серверов. По данным статистических сервисов (например, Netcraft, W3Techs), на начало 2025 года доля Nginx среди всех веб-сайтов в мире составляет около 30–35%, а среди сайтов с высокой посещаемостью (топ-10 000, топ-100 000) — более 50%. В России его доля традиционно выше среднемировой, достигая 60–70% среди крупных проектов.
Архитектура и принципы работы
Событийно-ориентированная модель
В отличие от традиционных веб-серверов, создающих отдельный процесс или поток для каждого соединения (модель «один процесс на запрос»), Nginx использует асинхронную, неблокирующую архитектуру. Основной процесс (master process) управляет несколькими рабочими процессами (worker processes), каждый из которых может обрабатывать тысячи одновременных соединений в одном потоке. Обработка запросов осуществляется через цикл событий (event loop), что позволяет не тратить ресурсы на ожидание завершения операций ввода-вывода.
Модульная структура
Функциональность Nginx расширяется за счёт модулей. Модули могут быть статическими (встроенными в ядро) или динамическими (загружаемыми во время работы). Основные категории модулей:
- Модули обработки запросов (HTTP, Stream, Mail);
- Фильтры (сжатие, преобразование заголовков, добавление/удаление данных);
- Балансировщики нагрузки (round-robin, least_connections, ip_hash, generic_hash, random);
- Модули аутентификации и авторизации;
- Модули кэширования (прокси-кэш, fastcgi-кэш, uwsgi-кэш);
- Модули сторонних разработчиков (например, модули для интеграции с Lua, PageSpeed, ModSecurity).
Обработка запросов
При получении HTTP-запроса Nginx выполняет следующие этапы:
- Приём соединения — установка TCP-соединения.
- Разбор запроса — чтение и парсинг заголовков и тела запроса.
- Выбор location — сопоставление URI запроса с правилами конфигурации (директивы
location). - Обработка — выполнение действий, заданных в конфигурации (проксирование, отдача статического файла, выполнение FastCGI-скрипта и т.д.).
- Формирование ответа — сборка заголовков и тела ответа.
- Отправка ответа — асинхронная отправка данных клиенту.
- Завершение соединения — закрытие или переиспользование соединения (keepalive).
Основные функции и возможности
Веб-сервер
Nginx может выступать в роли основного веб-сервера, обслуживая статические файлы (HTML, CSS, JavaScript, изображения, видео) с высокой скоростью. Он поддерживает:
- Отдачу статики из файловой системы;
- Обработку запросов к CGI-скриптам через FastCGI, uWSGI, SCGI, HTTP-прокси;
- Ограничение скорости передачи данных (rate limiting);
- Ограничение количества соединений (connection limiting);
- Поддержку HTTP/2 и HTTP/3 (QUIC);
- Поддержку WebSocket;
- Поддержку SSL/TLS (с версии 0.7.64).
Обратный прокси-сервер
Nginx часто используется как обратный прокси (reverse proxy) для распределения нагрузки между несколькими бэкенд-серверами (балансировка нагрузки). Функции обратного прокси:
- Балансировка нагрузки (round-robin, least connections, IP hash, generic hash, random);
- Кэширование ответов от бэкендов (снижение нагрузки на серверы приложений);
- Терминирование SSL/TLS (снятие шифрования на прокси);
- Сжатие ответов (gzip, brotli);
- Фильтрация запросов (блокировка по IP, User-Agent, геолокации);
- Агрегация нескольких бэкендов под одним доменом.
Почтовый прокси-сервер
Nginx может проксировать почтовые протоколы SMTP, IMAP и POP3, выполняя аутентификацию пользователей и перенаправляя их на соответствующие почтовые серверы.
TCP/UDP-прокси (Stream)
Модуль ngx_stream_core_module позволяет проксировать произвольные TCP- и UDP-соединения, что даёт возможность балансировать нагрузку для баз данных (MySQL, PostgreSQL, Redis), DNS-серверов, игровых серверов и любых других приложений, работающих по протоколам TCP/UDP.
Конфигурация
Структура конфигурационного файла
Основной конфигурационный файл Nginx обычно находится по пути /etc/nginx/nginx.conf (в Linux) или C:\nginx\conf\nginx.conf (в Windows). Конфигурация имеет иерархическую структуру, состоящую из блоков (контекстов):
main— глобальные настройки (количество рабочих процессов, пользователь, pid-файл);events— настройки обработки событий (модель ввода-вывода, максимальное количество соединений);http— настройки HTTP-сервера (включает блокиserverиlocation);server— настройки виртуального хоста (домен, порт, корневая директория);location— правила обработки определённых URI (регулярные выражения, префиксы, точные совпадения).
Пример минимальной конфигурации для статического сайта: ``nginx worker_processes auto; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name example.com; root /var/www/example.com; location / { try_files $uri $uri/ =404; } } } ``
Директивы и переменные
Nginx поддерживает множество директив для настройки поведения. Некоторые из наиболее часто используемых:
proxy_pass— передача запроса на бэкенд-сервер;fastcgi_pass— передача запроса FastCGI-серверу (например, PHP-FPM);rewrite— изменение URI с использованием регулярных выражений;return— возврат HTTP-статуса или редирект;add_header— добавление произвольного заголовка в ответ;set— установка значения переменной;map— создание ассоциативного массива для преобразования значений.
Встроенные переменные позволяют получать информацию о запросе: $remote_addr (IP клиента), $host (имя хоста), $uri (URI запроса), $request_method (метод HTTP), $http_user_agent (User-Agent) и многие другие.
Производительность
Преимущества перед Apache
Основные отличия Nginx от Apache HTTP Server:
- Архитектура: Nginx — событийно-ориентированный, Apache — процессно-ориентированный (или потоко-ориентированный в версии MPM worker/event).
- Потребление памяти: Nginx потребляет значительно меньше оперативной памяти на одно соединение (единицы килобайт против десятков килобайт у Apache).
- Обработка статики: Nginx быстрее отдаёт статические файлы благодаря асинхронному вводу-выводу.
- Обработка динамики: Nginx не выполняет динамические скрипты сам, а передаёт их бэкенд-серверам (например, PHP-FPM), тогда как Apache может встраивать интерпретатор (mod_php).
- Гибкость конфигурации: Apache использует файлы
.htaccessдля конфигурации на уровне директорий, что замедляет работу при большом количестве таких файлов; Nginx не поддерживает.htaccess, что повышает производительность, но требует перезагрузки конфигурации при изменениях.
Ограничения
- Nginx не имеет встроенной поддержки выполнения динамических скриптов (PHP, Python, Ruby) — для этого требуется FastCGI-сервер или проксирование на сервер приложений.
- Конфигурация не может быть изменена без перезагрузки (хотя поддерживается плавная перезагрузка без разрыва соединений).
- Модульная система менее гибкая, чем у Apache (некоторые модули требуют перекомпиляции).
Распространение и популярность
Статистика использования
По данным W3Techs (январь 2025), Nginx используется на 33,5% всех веб-сайтов мира, что делает его вторым по популярности веб-сервером после Apache (около 30%). Среди сайтов с высокой посещаемостью (топ-1000) доля Nginx превышает 70%.
Крупные пользователи
Nginx используется такими компаниями и сервисами, как:
- Яндекс — все основные сервисы (Поиск, Почта, Карты, Музыка);
- ВКонтакте — социальная сеть;
- Mail.ru — почтовый сервис, облачные сервисы;
- Сбербанк — интернет-банк, мобильные приложения;
- Netflix — стриминговая платформа;
- GitHub — хостинг репозиториев;
- WordPress.com — платформа для блогов;
- Cloudflare — CDN и защита от DDoS-атак (использует модифицированную версию Nginx).
Форки и альтернативы
Freenginx
В феврале 2024 года Игорь Сысоев объявил о создании форка Nginx под названием Freenginx. Причиной стали разногласия с политикой F5 Networks, в частности, решение компании вносить изменения безопасности в закрытую коммерческую версию Nginx Plus без публикации патчей в открытой версии. Freenginx позиционируется как полностью свободный проект, управляемый сообществом.
Angie
В октябре 2022 года бывшие сотрудники Nginx, покинувшие компанию после поглощения F5, основали форк Angie. Проект ориентирован на корпоративных пользователей и включает дополнительные функции, такие как встроенная поддержка Prometheus-метрик, динамическая переконфигурация upstream-серверов и расширенная статистика.
Tengine
Tengine — форк Nginx, разрабатываемый компанией Alibaba Group. Включает дополнительные модули для оптимизации работы в крупных распределённых системах, поддержку динамических модулей, улучшенную балансировку нагрузки и интеграцию с облачными сервисами Alibaba.
OpenResty
OpenResty — не столько форк, сколько платформа на базе Nginx, интегрирующая интерпретатор LuaJIT. Позволяет писать высокопроизводительные веб-приложения и API на Lua, используя всю мощь Nginx. Широко используется для создания API-шлюзов, WAF (Web Application Firewall) и микросервисов.
Критика и проблемы
Безопасность
Nginx считается одним из самых безопасных веб-серверов благодаря минималистичной архитектуре и малой поверхности атаки. Однако были выявлены уязвимости:
- CVE-2021-23017 (2021) — уязвимость в DNS-резолвере, позволявшая удалённо выполнить код.
- CVE-2023-44487 (2023) — уязвимость протокола HTTP/2 (Rapid Reset Attack), затрагивающая многие серверы, включая Nginx.
- Проблемы с обработкой chunked-запросов и переполнением буфера в модулях сторонних разработчиков.
Конфигурационная сложность
Для администраторов, привыкших к Apache, конфигурация Nginx может показаться неинтуитивной из-за отсутствия .htaccess-файлов и необходимости явно определять все правила. Однако это же свойство делает конфигурацию более предсказуемой и производительной.
Зависимость от сторонних модулей
Многие полезные функции (например, интеграция с Lua, PageSpeed, ModSecurity) реализованы в виде сторонних модулей, которые могут быть несовместимы с новыми версиями Nginx или требовать перекомпиляции. В коммерческой версии Nginx Plus часть этих функций доступна «из коробки».
Источники
- Nginx Documentation. Nginx, Inc. — официальная документация проекта.
- Сысоев И. В. «Архитектура Nginx» (2004–2011) — оригинальные статьи разработчика.
- W3Techs. Usage statistics of web servers (январь 2025).
- Netcraft. Web Server Survey (январь 2025).
- F5 Networks. «F5 Acquires Nginx» (2019) — пресс-релиз.
- Сысоев И. В. «Freenginx: новый форк» (2024) — объявление в списке рассылки.
- CVE-2021-23017, CVE-2023-44487 — базы данных уязвимостей.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →