Перейти к содержанию

core: Новый API на основе FFI для lua-nginx-module

Установка

Если вы еще не подписались на RPM-репозиторий, зарегистрируйтесь. После этого вы можете продолжить с следующими шагами.

CentOS/RHEL 7 или Amazon Linux 2

yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install lua-resty-core

CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023

dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install lua5.1-resty-core

Чтобы использовать эту библиотеку Lua с NGINX, убедитесь, что nginx-module-lua установлен.

Этот документ описывает lua-resty-core v0.1.32.post1, выпущенный 13 декабря 2025 года.


Эта библиотека автоматически загружается по умолчанию с версии OpenResty 1.15.8.1. Это поведение можно отключить с помощью директивы lua_load_resty_core, но обратите внимание, что использование этой библиотеки настоятельно рекомендуется, так как ее реализация FFI быстрее, безопаснее и более полная, чем Lua C API модуля ngx_lua.

Если вы используете более старую версию OpenResty, вам нужно загрузить эту библиотеку следующим образом:

    # nginx.conf

    http {
        # вам НЕ нужно настраивать следующую строку, когда вы
        # используете пакет OpenResty 1.4.3.9+.
        init_by_lua_block {
            require "resty.core"
            collectgarbage("collect")  -- просто для сбора мусора
        }

        ...
    }

Описание

Эта чистая библиотека Lua повторно реализует часть ngx_lua модуля Nginx API для Lua с помощью LuaJIT FFI и устанавливает новый Lua API на основе FFI в пространства имен ngx. и ndk., используемые модулем ngx_lua.

Кроме того, эта библиотека Lua реализует любые значительные новые Lua API модуля ngx_lua как полноценные модули Lua, такие как ngx.semaphore и ngx.balancer.

Lua API на основе FFI может работать с JIT-компилятором LuaJIT. Стандартный API ngx_lua основан на стандартном Lua C API, который никогда не будет JIT-компилироваться, и пользовательский код Lua всегда интерпретируется (медленно).

Поддержка нового ngx_stream_lua_module также началась.

Эта библиотека поставляется с пакетом OpenResty по умолчанию. Поэтому вам не нужно беспокоиться о зависимостях и требованиях.

Предварительные требования

ПРЕДУПРЕЖДЕНИЕ Эта библиотека включена в каждую версию OpenResty. Вы должны использовать встроенную версию этой библиотеки в конкретной версии OpenResty, которую вы используете. В противном случае вы можете столкнуться с серьезными проблемами совместимости.

Реализованный API

resty.core.hash

resty.core.base64

resty.core.uri

resty.core.regex

resty.core.exit

resty.core.shdict

resty.core.var

resty.core.ctx

get_ctx_table

синтаксис: ctx = resty.core.ctx.get_ctx_table(ctx?)

Похож на ngx.ctx, но принимает необязательный аргумент ctx. Он будет использовать ctx из вызывающего кода вместо создания новой таблицы, когда таблица ctx не существует.

Обратите внимание: таблица ctx будет использоваться на протяжении всего жизненного цикла текущего запроса. Пожалуйста, будьте очень осторожны, когда вы пытаетесь повторно использовать таблицу ctx. Вам нужно убедиться, что нет кода Lua, использующего или собирающегося использовать таблицу ctx в текущем запросе, прежде чем повторно использовать таблицу ctx в другом месте.

resty.core.request

resty.core.response

resty.core.misc

resty.core.time

resty.core.worker

resty.core.phase

resty.core.ndk

resty.core.socket

resty.core.param

  • ngx.arg (только геттер)

ngx.semaphore

Этот модуль Lua реализует API семафора для эффективной синхронизации "легких потоков", который может работать между разными запросами (но не между процессами рабочего nginx).

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.balancer

Этот модуль Lua реализует определение динамических балансировщиков upstream на Lua.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.ssl

Этот модуль Lua предоставляет API Lua для управления SSL-сертификатами, закрытыми ключами, версиями протоколов SSL и т.д. в NGINX при SSL-рукопожатиях downstream.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.ssl.clienthello

Этот модуль Lua предоставляет API Lua для постобработки сообщения SSL client hello для SSL-соединений downstream NGINX.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.ssl.session

Этот модуль Lua предоставляет API Lua для манипуляции данными и идентификаторами SSL-сессий для SSL-соединений downstream NGINX.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.re

Этот модуль Lua предоставляет API Lua, который реализует удобные утилиты для API ngx.re.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.resp

Этот модуль Lua предоставляет API Lua, который можно использовать для обработки HTTP-ответов.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

ngx.pipe

Этот модуль предоставляет API Lua для создания процессов и общения с ними неблокирующим образом.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

Этот модуль был впервые представлен в lua-resty-core v0.1.16.

ngx.process

Этот модуль Lua используется для управления процессом nginx на Lua.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

Этот модуль был впервые представлен в lua-resty-core v0.1.12.

ngx.errlog

Этот модуль Lua предоставляет API Lua для захвата и управления сообщениями об ошибках nginx.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

Этот модуль был впервые представлен в lua-resty-core v0.1.12.

ngx.base64

Этот модуль Lua предоставляет API Lua для безопасного кодирования/декодирования base64.

Смотрите документацию для этого модуля Lua для получения дополнительных деталей.

Этот модуль был впервые представлен в lua-resty-core v0.1.14.

Предупреждение

Если пользовательский код Lua не JIT-компилируется, то использование этой библиотеки может привести к снижению производительности в интерпретируемом режиме. Вы заметите ускорение только тогда, когда значительная часть вашего пользовательского кода Lua будет JIT-компилирована.

См. также

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-core.