Nginx
Cервер Nginx это веб-сервер, а также почтовый и прокси-сервер, работающий на Unix-подобных операционных системах
Программное обеспечение с открытым исходным кодом для создания веб-серверов. Оно принимает запрос клиента, например браузера, обрабатывает его и возвращает ответ. Был разработан в 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 в зависимости от ОС, обеспечивая гибкость при масштабировании.
