Nginx

Cервер Nginx это веб-сервер, а также почтовый и прокси-сервер, работающий на Unix-подобных операционных системах

Nginx Программное обеспечение с открытым исходным кодом для создания веб-серверов. Оно принимает запрос клиента, например браузера, обрабатывает его и возвращает ответ. Был разработан в 2002 году в качестве альтернативы серверу Apache, который тогда занимал более 60% рынка. В 2004 году продукт был опубликован для свободного использования.

Асинхронный сервер, он может обрабатывать множество запросов одновременно, поэтому подходит для сайтов с высоким трафиком. Nginx использует подход с событийной моделью. Сервер не создает новый процесс или поток для каждого запроса, а «ждет» события, когда запрос готов для обработки, и потом выполняет его.


Возможности

Мощный балансировщик нагрузки

Nginx распределяет входящие HTTP‑запросы между несколькими серверами по алгоритмам round‑robin, least‑conn и IP‑hash, обеспечивая высокую доступность и масштабируемость приложений.

Кеширование контента

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

Транзакционный HTTPS‑терминатор

Nginx может выполнять TLS‑шифрование, управлять сертификатами и протоколами (TLS 1.2/1.3), а также поддерживать HTTP/2 и SPDY для повышения пропускной способности соединений.

Фильтрация запросов и защита от атак

С помощью модулей «ngx_http_access_module», «ngx_http_limit_req_module» и «ngx_http_geoip_module» можно ограничивать доступ по IP‑адресам, скорости запросов и географическому признаку.

Мультипротоколы

Nginx работает не только с HTTP/HTTPS, но и с TCP/UDP‑протоколами через «ngx_stream_module», позволяя использовать его в качестве реверс‑прокси для любых сетевых сервисов.

Принцип работы

Однопоточная модель обработки

Каждый процесс обрабатывает тысячи соединений благодаря неблокирующему I/O и event‑loop, что минимизирует потребление памяти и повышает производительность.

Плагин‑система на C

Модули Nginx реализуются как динамические библиотеки, подключаемые в конфигурации через директиву «load_module», что позволяет расширять функционал без пересборки ядра.

Конфигурационный синтаксис

Файлы конфигурации разбиты на блоки «http», «server», «location» и др., обеспечивая декларативное описание маршрутизации, балансировки и кеширования.

Механизм «include»

Директива «include» позволяет включать внешние файлы конфигурации, что упрощает разделение настроек по средам (dev, prod) и повышает читаемость и гибкость при конфигурировании маршрутизации.

Система «events» и «worker_connections»

Параметры в блоке «events» определяют максимальное число одновременных соединений и используют epoll/kqueue/IOCP в зависимости от ОС, обеспечивая гибкость при масштабировании.