Что такое Nginx и почему он захватил веб

Рейтинг: 66.7% · 13 голосов
Самый подробный курс по Nginx - от первого конфига до production API-gateway. Архитектура и event loop, контексты и location, виртуальные хосты, статика, reverse proxy и upstream-балансировка, кэширование, HTTPS и TLS (post-quantum), HTTP/2 и HTTP/3 QUIC, безопасность и rate limiting, realip, JSON-логи и сквозная трассировка, метрики, тюнинг и траблшутинг. Плюс OpenResty (Lua, фазы, JWT, динамика) и Angie (нативные Prometheus, ACME, dynamic upstream). На основе эталонного gateway и лучших практик. Для новичков и SRE/DevOps. Актуально на 2026 (nginx 1.30/1.31, Angie, ingress-nginx EOL -> Gateway API).
Ответить
Аватара пользователя
Igor_NgINX
Сообщения: 44
Зарегистрирован: 11 май 2026, 05:31

Что такое Nginx и почему он захватил веб

Сообщение Igor_NgINX »

Оглавление курса (44)
  1. Что такое Nginx и почему он захватил веб (вы здесь)
  2. Установка Nginx, Angie и OpenResty: пакеты, версии, Docker
  3. Первый конфиг с нуля: минимальный сервер за 5 минут
  4. Архитектура процессов: master, worker и event loop
  5. Анатомия конфигурации: контексты, наследование и модульность
  6. Виртуальные хосты: server и server_name
  7. Директива location: матчинг и приоритеты по шагам
  8. Раздача статики: root, alias, try_files, sendfile
  9. Переменные, map и блок if
  10. rewrite, return и канонизация URL
  11. Работа с заголовками: add_header и proxy_set_header
  12. Модель доверия прокси-заголовков: realip и защита от спуфинга
  13. Сжатие: gzip, brotli и zstd
  14. Reverse proxy: proxy_pass и проброс запроса
  15. upstream и балансировка нагрузки
  16. Таймауты, повторы и устойчивость прокси
  17. FastCGI и PHP: nginx + PHP-FPM (и uwsgi/scgi)
  18. WebSocket, gRPC и стриминг через Nginx
  19. Кэширование ответов: proxy_cache и микрокэш
  20. HTTPS и TLS: сертификаты, протоколы, шифры (2026)
  21. Let's Encrypt и ACME: certbot, acme.sh, нативный ACME Angie
  22. HTTP/2 и HTTP/3 (QUIC) в 2026
  23. Безопасность: заголовки, скрытие версии, ограничения
  24. Rate limiting и защита от перегрузки
  25. Контроль доступа: allow/deny, auth_basic, auth_request и mTLS
  26. Логирование: access_log, форматы и структурированный JSON
  27. Сквозная трассировка запросов и OpenTelemetry
  28. Метрики и мониторинг Nginx
  29. Производительность и тюнинг под нагрузку
  30. Траблшутинг: 502, 504, 403, 404 и debug-лог
  31. OpenResty: Nginx как платформа на LuaJIT
  32. Фазы обработки запроса и Lua-хуки
  33. Lua API: ngx.*, shared dict, cosocket и lua-resty-core
  34. Практика OpenResty: авторизация, JWT, кэш, Redis
  35. Angie: современный форк Nginx 2026
  36. Динамическая конфигурация и service discovery
  37. Nginx как API-gateway и Kubernetes Gateway API
  38. Динамические модули, njs и WAF
  39. Stream-модуль: проксирование TCP и UDP
  40. Деплой, перезагрузка и конфиг как код
  41. Сценарий: статика, SPA и кэширование за CDN
  42. Сценарий: микросервисный gateway по образцу ngx-trace-gateway
  43. Капстоун: собираем production-gateway с нуля
  44. Чек-лист безопасности, CVE 2026 и аудит конфигурации
Представь сервер, на который одновременно ломится десять тысяч клиентов. Старый добрый Apache в режиме prefork на каждого посетителя поднимает отдельный процесс. Десять тысяч соединений - десять тысяч процессов или потоков, каждый со своим стеком, своим куском памяти, своим переключением контекста в ядре. Память кончается, планировщик ОС захлёбывается на context switch, и сервер ложится не от того, что данных много, а от того, что соединений много. Это и есть знаменитая проблема C10K (concurrent ten thousand connections), сформулированная Дэном Кегелом ещё в 1999 году: как одной машине держать десять тысяч одновременных клиентов и не умереть.

Игорь Сысоев писал Nginx именно под эту боль - под Rambler, где надо было отдавать статику массе пользователей дёшево по железу. Ответ на вопрос "что такое nginx" в одну строку: это веб сервер и обратный прокси с событийной (event-driven) архитектурой, который держит тысячи соединений горсткой процессов. Если ты прямо сейчас спрашиваешь себя, для чего нужен nginx и зачем он вообще - вот ради этого: масштаб по соединениям при копеечном расходе памяти. Дальше разберём механику, экосистему форков на 2026 год, ключевые термины и сквозную схему "как запрос проходит через nginx", которую мы будем тащить через весь курс.

Event-driven против prefork: почему nginx это не "ещё один веб сервер"

Модель "процесс на соединение" интуитивна: пришёл клиент - дали ему рабочего, рабочий с ним возится от и до. Беда в том, что HTTP-соединение большую часть жизни просто ждёт. Ждёт, пока клиент дошлёт байты по медленному мобильному каналу. Ждёт ответа от базы. Ждёт, пока браузер заберёт ответ. Всё это время процесс-рабочий занят, но ничего не делает - он висит на блокирующем чтении из сокета. Тысяча медленных клиентов - тысяча простаивающих процессов, сжирающих память.

Nginx переворачивает картину. У него небольшое число процессов-воркеров (обычно по одному на ядро CPU). Каждый воркер крутит бесконечный цикл событий (event loop) поверх системного механизма мультиплексирования - epoll на Linux, kqueue на BSD. Идея в одном предложении: вместо "сиди и жди на этом сокете" воркер говорит ядру "разбуди меня, когда на любом из моих тысяч сокетов появится готовность читать или писать". Ядро возвращает пачку готовых событий - воркер быстро их обрабатывает (распарсил кусок запроса, отдал кусок ответа, проксировал байты) и снова уходит в ожидание. Соединение, которое ждёт сети, не стоит почти ничего: это запись в структуре данных, а не целый процесс.

Код: Выделить всё

worker_processes auto;   # обычно = числу ядер CPU

events {
    worker_connections 10240;   # сколько соединений тянет ОДИН воркер
    multi_accept on;            # за один цикл принимать пачку новых соединений
    use epoll;                 # механизм мультиплексирования на Linux
}
Считаем грубо: 8 ядер на 10240 соединений на воркер - это потолок порядка 80 тысяч одновременных соединений на скромной машине. Apache prefork на той же машине упёрся бы в память на нескольких тысячах. Вот так nginx vs apache выглядит на пальцах: не "быстрее парсит HTTP", а принципиально другая модель работы с конкурентностью. Сравни поведение под нагрузкой:

Код: Выделить всё

# prefork (классическая модель): N соединений => N процессов/потоков
#   память: O(N), переключения контекста: много, потолок: тысячи
#
# event-driven (nginx): N соединений => горстка воркеров + epoll
#   память: O(N) дешёвых структур, переключений мало, потолок: десятки/сотни тысяч
Честная оговорка, чтобы не было мифов. Во-первых, современный Apache умеет событийный MPM event и уже не так плох, как prefork из нулевых. Во-вторых, event-loop налагает дисциплину: воркер нельзя блокировать. Если внутри воркера запустить тяжёлую синхронную операцию (упереться в диск без асинхронного ввода-вывода, позвать медленный внешний сервис намертво), он не сможет обслуживать остальные тысячи соединений в этот момент - встанет вся пачка. Поэтому в nginx работа с диском оптимизируют через sendfile, aio, thread_pool, а тяжёлую логику выносят на бэкенды. Эту дисциплину важно прочувствовать сразу: она объясняет половину дальнейших архитектурных решений в курсе.

Изображение

Для чего нужен nginx: пять ролей одного бинарника

Тот же event-driven движок закрывает целый веер задач. Понять, зачем нужен nginx на практике, проще всего через его роли - один и тот же процесс в зависимости от конфига становится:
  • Раздатчик статики. Отдаёт css, js, картинки, видео прямо с диска через sendfile (данные летят из файла в сокет в ядре, минуя копирование в userspace). Самая первая и самая дешёвая его работа.
  • Reverse proxy (обратный прокси). Принимает запрос снаружи и проксирует на приложение - PHP-FPM, Node, Python, Java. Клиент видит только nginx, бэкенд спрятан. Это его роль в 90% реальных инсталляций.
  • Балансировщик нагрузки. Раскидывает запросы на несколько одинаковых бэкендов (upstream-группа) по алгоритму round-robin, least_conn, hash и так далее. Один упал - трафик идёт на живых.
  • Терминатор TLS. Снимает с себя дорогую криптографию HTTPS, расшифровывает трафик на границе и дальше внутрь сети ходит по простому HTTP. Сертификаты, протоколы, шифры - всё на нём.
  • Кэш. Запоминает ответы бэкенда и отдаёт их сам, не дёргая приложение. Снимает нагрузку и ускоряет отдачу.
Из этих кирпичей собирается современный API-gateway - центральная точка входа, которая делает маршрутизацию, аутентификацию, rate limiting, трассировку и наблюдаемость. Именно туда мы и идём в этом курсе: от первого статического сайта до полноценного шлюза на OpenResty и Angie.

А теперь чего nginx не делает, чтобы не было завышенных ожиданий. Он не интерпретатор: сам по себе не выполняет PHP, Python или Java - он проксирует запрос туда, где код реально исполняется. Он не сервер приложений и не фреймворк. Он не база данных и не очередь сообщений. Из коробки он не делает активных health checks бэкендов в open-source-версии (только пассивные - помечает мёртвым после серии ошибок; активные проверки бесплатно есть в Angie). Граница простая: nginx - это умный, очень быстрый диспетчер трафика на входе. Бизнес-логика живёт за ним.

Карта экосистемы 2026: nginx, freenginx, Angie, OpenResty

Слово "nginx" в 2026 году - это уже не один проект, а целое семейство. Путаница тут стоит реальных денег и нервов на проде, поэтому разложим точно по состоянию на текущий момент.
  • nginx (под F5). Тот самый, оригинальный. В 2019-м NGINX Inc. купила F5 Networks, и развитие идёт под её крылом. Актуальная stable-ветка - 1.30.x (1.30.0 вышла 14 апреля 2026), mainline - 1.31.x. Версия 1.30 принесла важные вещи: отдельную директиву http2 on, 103 Early Hints вместо удалённого server push, ECH (Encrypted Client Hello), нативные sticky-сессии и переход проксирования к бэкенду на HTTP/1.1 с keepalive по умолчанию. Если кто-то называет текущей версией 1.25 или 1.27 - он отстал на год-два.
  • freenginx (форк Максима Дунаева). В феврале 2024 ведущий разработчик nginx Максим Дунаев разошёлся с F5 во взглядах на раскрытие уязвимостей и завёл независимый форк freenginx - "веб-сервер, которым рулят разработчики, а не корпорация". Важно: проект ЖИВОЙ. На 2026 это не брошенный экспонат: stable 1.30.1, mainline 1.31.2, security-фиксы выходят параллельно с nginx (тот же max_headers и поддержка OpenSSL 4.0 ехали в обеих ветках). Если встретишь утверждение "freenginx умер" - оно неверное.
  • Angie (форк экс-разработчиков nginx, РФ). Другая команда выходцев из nginx делает Angie. Актуально - 1.11.6 (25 мая 2026, на базе nginx 1.29.3) и ветка 1.12 (база 1.31.1). Фишка Angie в том, что он бесплатно даёт то, за что у F5 берут деньги в nginx Plus: REST API /status с детальным JSON, метрики Prometheus, панель Console Light, динамическое управление upstream без reload, нативный ACME (Let's Encrypt без certbot прямо в конфиге), нативный Zstd, активные health checks и slow_start, автообнаружение бэкендов по меткам Docker-контейнеров. 100% совместим по конфигам с nginx.
  • OpenResty (nginx + LuaJIT). Это не форк ради форка, а nginx, в который встроен LuaJIT (свой форк - openresty/luajit2 с GC64) и куча Lua-модулей. Ты пишешь логику прямо в конфиге на Lua, исполняемую внутри воркера на разных фазах обработки запроса. Актуальная версия - 1.31.1.1 (5 июня 2026, ядро nginx 1.31.1). Именно на OpenResty строят программируемые API-шлюзы - этим мы займёмся во второй половине курса.
Главный практический вывод: для нового прода под балансировку и наблюдаемость без лицензии присматривайся к Angie; для программируемого шлюза - OpenResty; ванильный nginx (или freenginx как его security-зеркало) - универсальная база. Это разные инструменты под разные задачи, а не "кто круче".

Мини-глоссарий и сквозная схема: как запрос проходит через nginx

Прежде чем нырять в конфиги в следующих уроках, забей в голову шесть слов - на них держится вообще всё.
  • Директива (directive). Одна инструкция конфига. Бывает простой (заканчивается ; - например worker_processes auto;) и блочной (с фигурными скобками - server { ... }).
  • Контекст (context). Блок, внутри которого действуют директивы: main (корень файла), events, http, server, location. Контексты вложены, и многие настройки наследуются от внешнего к внутреннему - это базовый принцип чтения любого конфига.
  • server (виртуальный хост, vhost). Описание одного сайта/сервиса: на каком порту слушать (listen), на какое имя откликаться (server_name). На одном nginx живут десятки vhost.
  • location. Правило для пути в URL внутри server. Именно location решает, что делать с /api/, что с /images/, а что с /. Сердце маршрутизации.
  • upstream. Именованная группа бэкенд-серверов для проксирования и балансировки. На неё ссылается proxy_pass.
  • worker (воркер). Процесс, который реально обслуживает соединения в event-loop. Главный (master) процесс ими только управляет: читает конфиг, открывает порты, перезапускает упавших и делает плавный reload.
Теперь склей это в путь одного запроса. Соединение приходит на воркер. По паре listen-адрес и заголовку Host (через SNI на TLS) воркер выбирает нужный server-блок. Внутри него по URI выбирается location. location решает: отдать файл с диска, проксировать в upstream, вернуть редирект или ошибку. Если проксируем - запрос уходит на бэкенд (возможно, через кэш и балансировку), ответ возвращается, прогоняется через фильтры (сжатие, добавление заголовков) и улетает клиенту. Эта цепочка - выбор server, выбор location, проксирование/отдача, ответ - и есть скелет, который мы будем детализировать весь курс. Запомни её сейчас, дальше будет только наращивание мяса на этот костяк.

Типичные грабли новичка
  • Путать prefork-мышление с event-driven. Не пытайся "дать каждому запросу свой процесс" в nginx - модель другая. И не блокируй воркер тяжёлой синхронной работой: встанет не один запрос, а целая пачка соединений этого воркера.
  • Ждать от nginx исполнения кода. Он не запускает твой PHP/Python сам - он проксирует на FPM/приложение. "Белый экран" часто не в nginx, а в бэкенде за ним.
  • Гнаться за устаревшим синтаксисом. Параметр listen ... http2 устарел - в 2026 включают HTTP/2 отдельной директивой http2 on;. Копировать старые гайды из 2018-го - прямой путь к предупреждениям и нерабочим настройкам.
  • Считать freenginx мёртвым, а HTTP/3 экспериментальным. Оба утверждения на 2026 ложны: freenginx активно релизится, HTTP/3 в stable и production-ready.
  • Смешивать форки в голове. nginx, Angie и OpenResty - разные дистрибутивы с разными возможностями. "В интернете писали, что так можно" нередко относится к другому форку или к платному nginx Plus.
Мини-лаба: пощупать руками за 5 минут

Глубоких конфигов тут ещё нет - задача просто увидеть зверя живьём и узнать его версию.
  • Подними nginx в Docker одной командой:

    Код: Выделить всё

    docker run --rm -p 8080:80 --name ngx nginx:1.30
  • Открой в браузере http://localhost:8080 - увидишь страницу "Welcome to nginx!". Это дефолтный server-блок отдаёт статику.
  • Узнай точную версию и параметры сборки:

    Код: Выделить всё

    docker exec ngx nginx -V
    Найди в выводе модули (--with-http_v2_module, --with-http_ssl_module и т.п.) - это и есть то, что умеет твой бинарник.
  • Проверь синтаксис конфига (главная команда на каждый день):

    Код: Выделить всё

    docker exec ngx nginx -t
    Ответ "syntax is ok / test is successful" - святое правило перед любым reload на проде.
  • Глянь на процессы внутри контейнера и найди master и worker:

    Код: Выделить всё

    docker exec ngx ps aux
    Увидишь "nginx: master process" и под ним "nginx: worker process" - ровно та модель из урока.
  • Для сравнения вытащи версию Angie:

    Код: Выделить всё

    docker run --rm angie/angie nginx -v
    Обрати внимание - команда та же nginx, конфиги совместимы, а вот возможности шире.
Контрольные вопросы
  • В чём суть проблемы C10K и почему prefork-модель упирается в потолок там, где event-driven держится?
  • Назови пять ролей nginx и приведи пример задачи под каждую. Что из этого nginx делать не будет?
  • Чем на 2026 год отличаются nginx (F5), freenginx, Angie и OpenResty? Под какую задачу что выберешь?
  • Перечисли шесть базовых терминов (контекст, директива, server, location, upstream, worker) и опиши путь запроса от прихода на воркер до ответа клиенту.
Итог

Nginx захватил веб не магией, а сменой модели: вместо "процесс на соединение" - событийный цикл, где горстка воркеров поверх epoll тянет десятки тысяч соединений. Этот же движок работает раздатчиком статики, обратным прокси, балансировщиком, терминатором TLS и кэшем - кирпичами будущего API-шлюза. В 2026 "nginx" - это семейство: живой nginx под F5 (1.30/1.31), активный форк freenginx, богатый бесплатными фичами Angie и программируемый OpenResty. Ты уже держишь в голове глоссарий и сквозную схему прохождения запроса - дальше мы только наполняем её конкретикой, конфиг за конфигом.
👍4 ❤️1 🔥 😄 🤔2
Аватара пользователя
vim_kun
Сообщения: 1
Зарегистрирован: 11 май 2026, 01:33

Re: Что такое Nginx и почему он захватил веб

Сообщение vim_kun »

Топ объяснение разницы prefork vs event-loop, наконец-то дошло почему апач ложился а нгинкс нет. Вопрос: если воркер нельзя блокировать, то как он тогда отдает большие файлы с медленного диска, он же там встрянет?
👍1 ❤️2 🔥 😄 🤔
Аватара пользователя
middlekraken
Сообщения: 1
Зарегистрирован: 15 май 2026, 23:44

Re: Что такое Nginx и почему он захватил веб

Сообщение middlekraken »

Не знал что freenginx живой, везде писали что Дунаев форкнул и забросил. И спасибо за разделение Angie и OpenResty - реально путался какой под что брать.
👍 ❤️ 🔥 😄 🤔
Ответить
Следующая глава →
Установка Nginx, Angie и OpenResty: пакеты, версии, Docker

Все главы курса «Nginx профессионально: от первого конфига до API-gateway на OpenResty и Angie»

Поделиться темой: ✈ Telegram VK

Вернуться в «Nginx профессионально: от первого конфига до API-gateway на OpenResty и Angie»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость