core: Nouvelle API basée sur FFI pour lua-nginx-module
Installation
Si vous n'avez pas configuré l'abonnement au dépôt RPM, inscrivez-vous. Ensuite, vous pouvez procéder avec les étapes suivantes.
CentOS/RHEL 7 ou 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
Pour utiliser cette bibliothèque Lua avec NGINX, assurez-vous que nginx-module-lua est installé.
Ce document décrit lua-resty-core v0.1.32.post1 publié le 13 décembre 2025.
Cette bibliothèque est automatiquement chargée par défaut depuis OpenResty 1.15.8.1. Ce comportement peut être désactivé via la directive lua_load_resty_core, mais notez que l'utilisation de cette bibliothèque est vivement recommandée, car son implémentation FFI est à la fois plus rapide, plus sûre et plus complète que l'API C Lua du module ngx_lua.
Si vous utilisez une version plus ancienne d'OpenResty, vous devez charger cette bibliothèque comme suit :
# nginx.conf
http {
# vous n'avez PAS besoin de configurer la ligne suivante lorsque vous
# utilisez le bundle OpenResty 1.4.3.9+.
init_by_lua_block {
require "resty.core"
collectgarbage("collect") -- juste pour collecter les déchets
}
...
}
Description
Cette bibliothèque Lua pure réimplémente une partie de l'API Nginx pour Lua du module ngx_lua avec LuaJIT FFI et installe la nouvelle API Lua basée sur FFI dans les espaces de noms ngx. et ndk. utilisés par le module ngx_lua.
De plus, cette bibliothèque Lua implémente toutes les nouvelles API Lua significatives du module ngx_lua en tant que modules Lua appropriés, comme ngx.semaphore et ngx.balancer.
L'API Lua basée sur FFI peut fonctionner avec le compilateur JIT de LuaJIT. L'API par défaut de ngx_lua est basée sur l'API C Lua standard, qui ne sera jamais compilée JIT et le code Lua utilisateur est toujours interprété (lentement).
Le support pour le nouveau ngx_stream_lua_module a également commencé.
Cette bibliothèque est livrée avec le bundle OpenResty par défaut. Vous n'avez donc pas vraiment besoin de vous soucier des dépendances et des exigences.
Prérequis
AVERTISSEMENT Cette bibliothèque est incluse avec chaque version d'OpenResty. Vous devez utiliser la version intégrée de cette bibliothèque dans la version particulière d'OpenResty que vous utilisez. Sinon, vous pourriez rencontrer de graves problèmes de compatibilité.
- LuaJIT 2.1 (pour l'instant, c'est la branche git v2.1 dans le dépôt git officiel 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 Implémentées
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
syntaxe : ctx = resty.core.ctx.get_ctx_table(ctx?)
Semblable à ngx.ctx mais elle accepte un argument ctx optionnel. Elle utilisera le ctx de l'appelant au lieu de créer une nouvelle table lorsque la table ctx n'existe pas.
Remarque : la table ctx sera utilisée pendant tout le cycle de vie de la requête actuelle. Veuillez faire très attention lorsque vous essayez de réutiliser la table ctx. Vous devez vous assurer qu'aucun code Lua n'utilise ou n'est sur le point d'utiliser la table ctx dans la requête actuelle avant de réutiliser la table ctx ailleurs.
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 (getter seulement)
ngx.semaphore
Ce module Lua implémente une API de sémaphore pour une synchronisation efficace des "threads légers", qui peut fonctionner à travers différentes requêtes (mais pas à travers les processus de travail nginx).
Voir la documentation pour ce module Lua pour plus de détails.
ngx.balancer
Ce module Lua implémente la définition de répartiteurs en amont dynamiques en Lua.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.ssl
Ce module Lua fournit une API Lua pour contrôler les certificats SSL, les clés privées, les versions de protocole SSL, etc. dans les échanges SSL en aval de NGINX.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.ssl.clienthello
Ce module Lua fournit une API Lua pour le post-traitement du message hello client SSL pour les connexions SSL en aval de NGINX.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.ssl.session
Ce module Lua fournit une API Lua pour manipuler les données et les identifiants de session SSL pour les connexions SSL en aval de NGINX.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.re
Ce module Lua fournit une API Lua qui implémente des utilitaires pratiques pour l'API ngx.re.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.resp
Ce module Lua fournit une API Lua qui peut être utilisée pour gérer la réponse HTTP.
Voir la documentation pour ce module Lua pour plus de détails.
ngx.pipe
Ce module fournit une API Lua pour créer des processus et communiquer avec eux de manière non bloquante.
Voir la documentation pour ce module Lua pour plus de détails.
Ce module a été introduit pour la première fois dans lua-resty-core v0.1.16.
ngx.process
Ce module Lua est utilisé pour gérer le processus nginx en Lua.
Voir la documentation pour ce module Lua pour plus de détails.
Ce module a été introduit pour la première fois dans lua-resty-core v0.1.12.
ngx.errlog
Ce module Lua fournit une API Lua pour capturer et gérer les messages de journal d'erreurs nginx.
Voir la documentation pour ce module Lua pour plus de détails.
Ce module a été introduit pour la première fois dans lua-resty-core v0.1.12.
ngx.base64
Ce module Lua fournit une API Lua pour encoder/décoder en base64 sécurisé pour les URL.
Voir la documentation pour ce module Lua pour plus de détails.
Ce module a été introduit pour la première fois dans lua-resty-core v0.1.14.
Avertissement
Si le code Lua utilisateur n'est pas compilé JIT, l'utilisation de cette bibliothèque peut entraîner une baisse de performance en mode interprété. Vous n'observerez une accélération que lorsque vous aurez une bonne partie de votre code Lua utilisateur compilé JIT.
Voir Aussi
- le module ngx_lua : https://github.com/openresty/lua-nginx-module#readme
- LuaJIT FFI : http://luajit.org/ext_ffi.html
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-core.