nginx
Nginx (произносится «энджинкс») — высокопроизводительный веб-сервер, обратный прокси-сервер и балансировщик нагрузки с открытым исходным кодом. Создан Игорем Сысоевым в 2002 году для решения «проблемы C10k» — одновременного обслуживания десятков тысяч соединений. Nginx используют крупнейшие сайты мира: Netflix, Dropbox, WordPress.com, GitLab.
Архитектура Nginx: почему он такой быстрый
Традиционные веб-серверы (Apache с MPM prefork) создавали отдельный процесс или поток на каждое соединение. При тысячах одновременных запросов это означало тысячи процессов — огромный расход памяти и потери на переключение контекста.
Nginx использует событийно-ориентированную асинхронную архитектуру. Один рабочий процесс (worker) обрабатывает тысячи соединений через цикл событий (event loop) без блокировки. Количество workers обычно равно числу ядер CPU. Такая архитектура позволяет обслуживать 10 000+ одновременных соединений с минимальным потреблением памяти.
Nginx как веб-сервер
В роли веб-сервера Nginx отдаёт статические файлы: HTML, CSS, JavaScript, изображения. Это его самая эффективная задача: файлы читаются с диска и отправляются клиенту без лишних обработок. Настройка минимальна — указать корневую директорию и правила кеширования.
Поддерживает HTTP/1.1, HTTP/2 (с мультиплексированием запросов), HTTPS через TLS (с автоматическим получением сертификатов через Certbot/ACME). Gzip-сжатие снижает объём передаваемых данных.
Nginx как обратный прокси
Обратный прокси — режим, в котором Nginx принимает запросы клиентов и перенаправляет их на внутренние серверы приложений (upstream). Клиент общается только с Nginx, не зная об архитектуре бэкенда. Это даёт:
- Терминацию TLS: Nginx расшифровывает HTTPS, бэкенд получает HTTP — проще и быстрее.
- Кеширование ответов: часто запрашиваемые данные не доходят до приложения.
- Сжатие: Nginx сжимает ответы за приложение.
- Скрытие внутренней структуры и дополнительный уровень безопасности.
Балансировка нагрузки в Nginx
Nginx распределяет запросы между несколькими upstream-серверами. Алгоритмы балансировки: round-robin (по очереди, по умолчанию), least_conn (на сервер с наименьшим числом активных соединений), ip_hash (один клиент всегда попадает на один сервер — для сессий), random, взвешенный round-robin (серверы с разной мощностью получают разную долю трафика).
Health checks позволяют автоматически исключать недоступные upstream из ротации (в Nginx Plus — в open source через сторонние модули).
Структура конфигурации
Конфигурация Nginx иерархична: http → server → location. Блок server соответствует виртуальному хосту (домену). Блоки location задают правила обработки URL — куда проксировать, какой файл отдать, как кешировать.
Директива proxy_pass перенаправляет запрос на upstream. try_files ищет файл на диске и только при отсутствии передаёт запрос приложению. rewrite и return управляют редиректами.
Nginx как API Gateway
Nginx используют как лёгкий API Gateway: маршрутизация запросов к микросервисам по URL-паттернам, rate limiting (limit_req), аутентификация через auth_request, логирование в JSON. Для более сложных сценариев — OpenResty (Nginx + LuaJIT) или Nginx Unit.
Nginx vs Apache
Apache использует модульную архитектуру с поддержкой mod_php, mod_rewrite, .htaccess — гибче в настройке «на лету» через файлы в директориях. Nginx требует перезагрузки конфигурации, но выигрывает в производительности при высоких нагрузках и статическом контенте. Многие используют оба: Apache обрабатывает PHP, Nginx стоит перед ним как прокси.
Частые вопросы
Nginx или Apache: что выбрать?
Для современных приложений с высокими нагрузками и статическим контентом — Nginx. Для legacy PHP-приложений с .htaccess или mod_rewrite — Apache или связка Apache+Nginx. Nginx быстрее на статике и при высокой конкурентности.
Как Nginx обрабатывает HTTPS?
Nginx терминирует TLS: принимает зашифрованное соединение от клиента, расшифровывает и передаёт запрос на бэкенд по HTTP. Сертификаты настраиваются директивами ssl_certificate и ssl_certificate_key. Для автоматического обновления используют Certbot с ACME-протоколом.
Что такое upstream в Nginx?
Upstream — блок конфигурации, описывающий группу серверов, на которые Nginx проксирует запросы. Включает адреса серверов, алгоритм балансировки, параметры keepalive и веса. Запросы в location передаются в upstream через директиву proxy_pass.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «nginx» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).