Архитектура OpenResty
Изучите, как ngx_lua встраивает LuaJIT в фазы обработки запросов Nginx.
«Архитектура OpenResty» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.
Что такое OpenResty?
OpenResty — это веб-платформа, встраивающая LuaJIT в Nginx. Она превращает Nginx в полнофункциональный сервер веб-приложений, где код Lua обрабатывает запросы.
Модуль ngx_lua
Модуль ngx_lua интегрирует LuaJIT с Nginx. Он предоставляет API ngx.* для доступа к данным запросов и ответов, таймерам, общей памяти и косокетам.
Фазы обработки запросов Nginx
OpenResty предоставляет фазы обработки запросов Nginx в виде перехватчиков Lua: init_by_lua, access_by_lua, content_by_lua, header_filter_by_lua, log_by_lua.
Основы nginx.conf
Настройте обработчики Lua в nginx.conf с помощью соответствующей директивы фазы.
# nginx.conf snippet
server {
listen 80;
location /hello {
content_by_lua_block {
ngx.header["Content-Type"] = "text/plain"
ngx.say("Hello from Lua!")
}
}
}Модель «сопрограмма на запрос»
Каждый входящий запрос получает собственную сопрограмму Lua. Когда сопрограмма приостанавливается (например, ожидая базу данных), Nginx обслуживает другие запросы. Это обеспечивает высокую параллельность без блокировки.
API ngx
Основные функции ngx: ngx.say(), ngx.print(), ngx.header, ngx.var, ngx.req.*, ngx.status, ngx.exit().
Состояние общей памяти
Рабочие процессы обмениваются данными через ngx.shared.DICT — общий словарь, объявленный в nginx.conf и имеющий фиксированный объём памяти.
# nginx.conf
lua_shared_dict my_cache 10m;
-- In Lua:
ngx.shared.my_cache:set("key", "value", 60)Косокеты
Косокеты OpenResty обеспечивают неблокирующие TCP/UDP и HTTP. Они интегрируются с циклом обработки событий Nginx, поэтому Lua может выполнять асинхронный ввод-вывод, не блокируя рабочий процесс.
API таймеров
ngx.timer.at(delay, fn) планирует запуск функции Lua после задержки. ngx.timer.every(interval, fn) запускает функцию периодически.
Профиль производительности
OpenResty обрабатывает десятки тысяч одновременных соединений на один рабочий процесс. В сочетании со скоростью LuaJIT и проверенной временем мультиплексизацией ввода-вывода Nginx он конкурирует с Go и Node.js в нагрузках, ограниченных вводом-выводом.
Распространённые случаи использования
- Шлюзы API и ограничение частоты запросов.
- Промежуточное ПО для аутентификации и авторизации.
- Динамическая маршрутизация запросов.
- Слои кэширования Redis и Memcached.
Вопрос об OpenResty
Как OpenResty обеспечивает высокую степень параллелизма?
Итоги: архитектура OpenResty
OpenResty встраивает LuaJIT в Nginx. Каждый запрос выполняется как сопрограмма. API ngx.* предоставляет доступ к данным запроса и ответа, общей памяти, таймерам и неблокирующим косокетам.
Часто задаваемые вопросы
Урок «Архитектура OpenResty» бесплатный?
Да — полный текст урока «Архитектура OpenResty» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.
Чему я научусь в уроке «Архитектура OpenResty»?
Изучите, как ngx_lua встраивает LuaJIT в фазы обработки запросов Nginx. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Lua Academy?
Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Архитектура OpenResty»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Lua Academy?
Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Архитектура OpenResty
- Обработка HTTP-запросов в Lua
- Сокеты-сопрограммы и неблокирующий TCP
- Словари общей памяти