nginx 编译集成 lua 模块需手动指定路径与依赖:--prefix 设安装根目录,--add-module 静态编译模块,--with-luajit-lib/--with-lua-lib 指定链接库路径,运行时依赖 ld_library_path 或 ld.so.conf 配置的 liblua/luajit 库。

编译 Nginx 并集成 Lua 模块(通常指 lua-nginx-module)时,安装路径和依赖关系需手动明确指定,Nginx 本身不自带 Lua 支持,也不自动处理 Lua 运行时依赖。关键在于:Lua 模块是“编译期集成、运行期依赖 Lua 解释器”的组合,路径控制权在 configure 阶段,而运行时能否执行 Lua 代码取决于系统是否提供兼容的 liblua 或 LuaJIT。
安装路径由 configure 的 --prefix 和模块路径参数共同决定
Nginx 主程序与模块的最终落点由以下参数控制:
-
--prefix=PATH:指定 Nginx 安装根目录(默认
/usr/local/nginx),其下生成conf/、logs/、sbin/等子目录; -
--add-module=/path/to/lua-nginx-module:仅告知编译器源码位置,不改变安装路径;该模块代码会被静态编译进
nginx二进制文件,不生成独立 so 文件; - --with-luajit-lib=/path/to/libluajit-5.1.so(若用 LuaJIT)或 --with-lua-lib=/path/to/liblua.so(若用标准 Lua):用于链接 Lua 运行时库,影响编译链接阶段,但不指定运行时加载路径;
- 实际运行时加载的 Lua 库路径由
LD_LIBRARY_PATH或系统/etc/ld.so.conf决定,与编译时路径无必然对应关系。
核心依赖项必须提前就位
编译成功 ≠ 运行成功。以下三类依赖缺一不可:
- Lua 解释器实现:推荐 LuaJIT(性能更好,与 lua-nginx-module 兼容性更成熟),版本建议 2.0/2.1/2.2;标准 Lua(5.1/5.2/5.3)也可用,但需确认模块兼容性(官方主推 LuaJIT);
-
对应的开发包:如
luajit-devel(含luajit.h和libluajit-5.1.so)或lua-devel;头文件用于编译,库文件用于链接; -
Nginx 基础依赖:
PCRE(支持正则)、zlib(gzip)、OpenSSL(HTTPS)仍需存在,lua-nginx-module 不替代它们。
常见路径配置示例(以 LuaJIT 为例)
假设 LuaJIT 已安装在 /opt/luajit(即 /opt/luajit/lib/libluajit-5.1.so,头文件在 /opt/luajit/include/luajit-2.1/):
./configure \ --prefix=/usr/local/nginx-lua \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-luajit-lib=/opt/luajit/lib \ --with-luajit-inc=/opt/luajit/include/luajit-2.1 \ --add-module=/path/to/lua-nginx-module
注意:--with-luajit-lib 指向的是 库文件所在目录(不是 .so 文件全路径),--with-luajit-inc 指向头文件目录;configure 会自动查找 libluajit-5.1.so 和 luajit.h。
运行时库路径不能遗漏
即使编译链接成功,启动 Nginx 时若提示 error while loading shared libraries: libluajit-5.1.so.2,说明动态链接器找不到该库:
- 临时解决:启动前执行
export LD_LIBRARY_PATH=/opt/luajit/lib:$LD_LIBRARY_PATH; - 永久解决:将
/opt/luajit/lib加入/etc/ld.so.conf.d/luajit.conf,再运行ldconfig; - 验证方式:
ldd $(which nginx) | grep luajit应显示正确路径;nginx -V 2>&1 | grep -i lua可确认模块是否被识别。










