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, которую вы используете. В противном случае вы можете столкнуться с серьезными проблемами совместимости.
- LuaJIT 2.1 (на данный момент это ветка v2.1 в официальном репозитории luajit-2.0: http://luajit.org/download.html)
- ngx_http_lua_module v0.10.25.
- ngx_stream_lua_module v0.0.13.
- lua-resty-lrucache
Реализованный API
resty.core.hash
resty.core.base64
resty.core.uri
resty.core.regex
resty.core.exit
resty.core.shdict
- ngx.shared.DICT.get
- ngx.shared.DICT.get_stale
- ngx.shared.DICT.incr
- ngx.shared.DICT.set
- ngx.shared.DICT.safe_set
- ngx.shared.DICT.add
- ngx.shared.DICT.safe_add
- ngx.shared.DICT.replace
- ngx.shared.DICT.delete
- ngx.shared.DICT.ttl
- ngx.shared.DICT.expire
- ngx.shared.DICT.flush_all
- ngx.shared.DICT.free_space
- ngx.shared.DICT.capacity
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
- ngx.req.get_headers
- ngx.req.get_uri_args
- ngx.req.start_time
- ngx.req.get_method
- ngx.req.set_method
- ngx.req.set_header
- ngx.req.clear_header
resty.core.response
resty.core.misc
resty.core.time
- ngx.time
- ngx.now
- ngx.update_time
- ngx.localtime
- ngx.utctime
- ngx.cookie_time
- ngx.http_time
- ngx.parse_http_time
- monotonic_msec
- monotonic_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-компилирована.
См. также
- модуль ngx_lua: https://github.com/openresty/lua-nginx-module#readme
- LuaJIT FFI: http://luajit.org/ext_ffi.html
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-core.