Открыть сервис

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-запроса Nginx выполняет следующие этапы:

  1. Приём соединения — установка TCP-соединения.
  2. Разбор запроса — чтение и парсинг заголовков и тела запроса.
  3. Выбор location — сопоставление URI запроса с правилами конфигурации (директивы location).
  4. Обработка — выполнение действий, заданных в конфигурации (проксирование, отдача статического файла, выполнение FastCGI-скрипта и т.д.).
  5. Формирование ответа — сборка заголовков и тела ответа.
  6. Отправка ответа — асинхронная отправка данных клиенту.
  7. Завершение соединения — закрытие или переиспользование соединения (keepalive).

Основные функции и возможности

Веб-сервер

Nginx может выступать в роли основного веб-сервера, обслуживая статические файлы (HTML, CSS, JavaScript, изображения, видео) с высокой скоростью. Он поддерживает:

Обратный прокси-сервер

Nginx часто используется как обратный прокси (reverse proxy) для распределения нагрузки между несколькими бэкенд-серверами (балансировка нагрузки). Функции обратного прокси:

Почтовый прокси-сервер

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). Конфигурация имеет иерархическую структуру, состоящую из блоков (контекстов):

Пример минимальной конфигурации для статического сайта: ``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 поддерживает множество директив для настройки поведения. Некоторые из наиболее часто используемых:

Встроенные переменные позволяют получать информацию о запросе: $remote_addr (IP клиента), $host (имя хоста), $uri (URI запроса), $request_method (метод HTTP), $http_user_agent (User-Agent) и многие другие.

Производительность

Преимущества перед Apache

Основные отличия Nginx от Apache HTTP Server:

Ограничения

Распространение и популярность

Статистика использования

По данным W3Techs (январь 2025), Nginx используется на 33,5% всех веб-сайтов мира, что делает его вторым по популярности веб-сервером после Apache (около 30%). Среди сайтов с высокой посещаемостью (топ-1000) доля Nginx превышает 70%.

Крупные пользователи

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 считается одним из самых безопасных веб-серверов благодаря минималистичной архитектуре и малой поверхности атаки. Однако были выявлены уязвимости:

Конфигурационная сложность

Для администраторов, привыкших к Apache, конфигурация Nginx может показаться неинтуитивной из-за отсутствия .htaccess-файлов и необходимости явно определять все правила. Однако это же свойство делает конфигурацию более предсказуемой и производительной.

Зависимость от сторонних модулей

Многие полезные функции (например, интеграция с Lua, PageSpeed, ModSecurity) реализованы в виде сторонних модулей, которые могут быть несовместимы с новыми версиями Nginx или требовать перекомпиляции. В коммерческой версии Nginx Plus часть этих функций доступна «из коробки».

Источники

  1. Nginx Documentation. Nginx, Inc. — официальная документация проекта.
  2. Сысоев И. В. «Архитектура Nginx» (2004–2011) — оригинальные статьи разработчика.
  3. W3Techs. Usage statistics of web servers (январь 2025).
  4. Netcraft. Web Server Survey (январь 2025).
  5. F5 Networks. «F5 Acquires Nginx» (2019) — пресс-релиз.
  6. Сысоев И. В. «Freenginx: новый форк» (2024) — объявление в списке рассылки.
  7. CVE-2021-23017, CVE-2023-44487 — базы данных уязвимостей.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →