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.

Не хватает деталей?

Напишите, что уточнить по теме «nginx» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться