lua-nginx-module

Тема дорожной карты · Nginx

Модуль lua-nginx-module (также известный как ngx_http_lua_module) встраивает среду выполнения LuaJIT непосредственно в рабочий процесс Nginx, позволяя операторам писать пользовательскую логику обработки запросов на Lua, исполняющуюся в рамках высокопроизводительной событийной модели Nginx без блокирующего I/O. С lua-nginx-module разработчики могут перехватывать запросы на любой фазе Nginx с помощью директив вроде access_by_lua_block, content_by_lua_block и header_filter_by_lua_block, реализуя такие сценарии, как динамическая аутентификация, перезапись запросов, A/B-тестирование и ограничение скорости на базе Redis — то, что в противном случае потребовало бы отдельного прокси на уровне приложения. Модуль распространяется в составе платформы OpenResty — полнофункционального веб-сервера на основе Nginx и LuaJIT, — которая объединяет lua-nginx-module с богатой экосистемой библиотек (lua-resty-redis, lua-resty-http, lua-resty-jwt) для построения высокопроизводительных веб-приложений и API-шлюзов целиком в слое обратного прокси. Поскольку Lua-скрипты выполняются внутри воркеров Nginx и разделяют их событийный цикл, все I/O-операции должны использовать предоставляемый неблокирующий API cosocket; блокирующие вызовы остановят воркер и сведут на нет преимущества производительности событийной модели Nginx. lua-nginx-module является основой для продвинутой кастомизации Nginx в сценариях, где встроенного конфигурационного языка недостаточно, а полная переработка приложения нежелательна.

Как это работает

lua-nginx-module покрывает third-party модули: ngx_brotli (сжатие), ngx_http_geoip2 (GeoIP-решения), ngx_pagespeed (HTTP-оптимизация, upstream deprecated — см. Google PageSpeed Insights), ngx_http_lua (OpenResty — Lua-скриптинг внутри nginx), ngx_http_secure_link (подписанные URL), ModSecurity (WAF), naxsi (WAF проще). OpenResty пакетирует nginx + Lua + много модулей — частая основа для API-шлюзов (Kong, APISIX).

Когда применять

OpenResty — когда нужна реальная программируемость в request-пути (кастомная auth, продвинутый rate limit, динамический routing); Lua быстр + безопасен внутри nginx. ModSecurity или naxsi — когда WAF обязателен по compliance (PCI-DSS); но CDN с встроенным WAF (Cloudflare, Yandex Cloud Smart Web Security) обычно проще. ngx_brotli — для лучшего сжатия текста.

Типичные ошибки

Ловушки lua-nginx-module: сложная Lua в OpenResty, которую никто в команде не дебажит (knowledge silo); ModSecurity rule sets, блокирующие легитимный трафик (false positives — тюньте осторожно); кастомные модули требуют пересборки nginx (используйте distro-пакеты или Docker-образы с ними).

Связанные понятия

Полезные ресурсы