必须使用openresty源码编译而非原生nginx,因其已预集成luajit和lua-nginx-module;需安装pcre-devel、openssl-devel、zlib-devel、gcc等依赖;配置时无需手动添加模块,验证可通过nginx -v和content_by_lua_block测试。

Nginx 源码编译本身不直接支持 LuaJIT 模块,因为官方 Nginx 不包含 ngx_lua 模块。要让 Nginx 具备 LuaJIT 执行能力(即 OpenResty 的核心功能),必须通过 集成 lua-nginx-module 并链接 LuaJIT 来实现。严格来说,“用原生 Nginx 源码编译开启 LuaJIT 支持”不可行;正确路径是:使用 OpenResty 源码(它已预集成 LuaJIT + lua-nginx-module)进行编译安装。
以下是关键操作逻辑和实操要点:
编译前必须确认的依赖项
-
pcre-devel:用于正则匹配(rewrite、location 等) -
openssl-devel:启用 HTTPS、SSL/TLS 功能 -
zlib-devel:支持 gzip 压缩 -
gcc及基础编译工具链 -
LuaJIT 已内置在 OpenResty 源码中,无需单独安装或指定
--with-luajit
执行安装命令:
yum install -y pcre-devel openssl-devel zlib-devel gcc make
使用 OpenResty 源码而非 Nginx 源码
OpenResty 是 Nginx + LuaJIT + 大量增强模块(如 lua-nginx-module, redis2-nginx-module, stream-lua-nginx-module 等)的完整发行版。其源码包已自带 LuaJIT 子模块,并在 ./configure 阶段自动启用。
下载并解压最新版(例如 openresty-1.27.1.2.tar.gz):
curl -O https://openresty.org/download/openresty-1.27.1.2.tar.gz tar -zxvf openresty-1.27.1.2.tar.gz cd openresty-1.27.1.2
运行配置(默认已启用 Lua 支持):
./configure --prefix=/usr/local/openresty \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module
✅ 无需手动加 --add-module=.../lua-nginx-module —— OpenResty 的 configure 脚本会自动识别并集成内置模块。
编译并安装:
make && make install
验证 Lua 支持是否生效
安装完成后,检查是否含 lua 相关指令:
/usr/local/openresty/nginx/sbin/nginx -V 2>&1 | grep -o 'lua'
应输出 lua(表示模块已编译进内核)。
再写一个最小测试配置(/usr/local/openresty/nginx/conf/nginx.conf):
location /hello {
content_by_lua_block {
ngx.say("Hello from LuaJIT via OpenResty!")
}
}
启动并访问:
/usr/local/openresty/nginx/sbin/nginx curl http://localhost/hello
返回 Hello from LuaJIT via OpenResty! 即成功。
注意事项
- ❌ 不要用
nginx-1.x.x.tar.gz+ 手动--add-module=ngx_http_lua_module方式“拼装”OpenResty:容易因 LuaJIT 版本不匹配、ABI 冲突、协程调度异常等问题导致segmentation fault或coroutine running错误。 - ✅ OpenResty 官方维护的
lua-nginx-module与所带 LuaJIT 版本经过严格兼容性测试,是唯一推荐方式。 - 若需自定义 LuaJIT(如启用 GC64 模式),需修改 OpenResty 源码树中的
bundle/LuaJIT-2.1-*/目录并重新make clean && ./configure && make,但非常规需求不建议改动。
不复杂但容易忽略











