要在源码安装 Nginx 时集成 Lua 运行环境,核心是编译阶段显式引入 ngx_http_lua_module 及其依赖模块,并确保 LuaJIT 已预编译安装、环境变量正确导出,再通过 configure 的 --add-module 指定路径并启用必要模块(如 SSL、gzip),最后验证 nginx -V 输出含 http_lua 字样及 location 中 content_by_lua_block 可执行。

要在源码安装 Nginx 时集成 Lua 运行环境,核心是编译阶段显式引入 ngx_http_lua_module 及其依赖模块,并确保 Lua 解释器(推荐 LuaJIT)已就位。这不是简单加个配置就能启用的功能,而是需要在构建 Nginx 二进制前完成依赖准备、路径指定和模块链接。整个过程对编译参数顺序、库路径、版本兼容性较敏感。
准备 LuaJIT 和必要开发依赖
原生 Lua 不是必须项,OpenResty 官方及生产环境普遍采用 LuaJIT(性能更优、体积更小)。需提前编译安装并导出路径:
- 下载并安装 LuaJIT(如 2.1 或 2.0.5):
wget http://luajit.org/download/LuaJIT-2.1.0-beta3.tar.gz
tar -zxf LuaJIT-2.1.0-beta3.tar.gz
cd LuaJIT-2.1.0-beta3
make && sudo make install - 设置环境变量(影响后续 Nginx configure):
export LUAJIT_LIB=/usr/local/lib
export LUAJIT_INC=/usr/local/include/luajit-2.1
(注意:路径需与实际安装位置一致,可通过find /usr -name "luajit.h"确认) - 安装基础编译依赖:
yum install -y gcc pcre-devel openssl-devel zlib-devel perl-devel
(CentOS/RHEL)或 apt-get install -y build-essential libpcre3-dev libssl-dev zlib1g-dev(Ubuntu/Debian)
获取并验证 ngx_lua 模块源码
从官方 GitHub 获取稳定版 lua-nginx-module(注意匹配 Nginx 版本,建议选 v0.10.24+):
- cd /usr/local/src
git clone https://github.com/openresty/lua-nginx-module.git
cd lua-nginx-module
git checkout v0.10.24 - 可选但推荐:同时获取
ngx_devel_kit(NDK),部分 Lua 功能依赖它:
git clone https://github.com/simpl/ngx_devel_kit.git - 确认模块目录结构完整,
config文件存在且可读
下载 Nginx 源码并执行带 Lua 的 configure
选择一个与 lua-nginx-module 兼容的 Nginx 版本(如 1.22.x 或 1.24.x;避免过新如 1.27+,易出现 API 不兼容):
- wget https://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0 - 运行 configure 命令,关键点:
– 必须包含--add-module指向lua-nginx-module路径;
– 若用了 NDK,需先加--add-module指向它;
– 显式启用 SSL、gzip、rewrite 等常用模块(Lua 脚本常依赖它们);
– 示例命令:
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--add-module=/usr/local/src/ngx_devel_kit \
--add-module=/usr/local/src/lua-nginx-module \
--with-ld-opt="-Wl,-rpath,/usr/local/lib" - 执行
make && sudo make install。成功后,/usr/local/nginx/sbin/nginx -V应输出含http_lua字样,且grep -o with-http_lua_module返回非空
启用 Lua 并验证基础功能
安装完成后,还需最小化配置才能真正运行 Lua 脚本:
- 编辑
/usr/local/nginx/conf/nginx.conf,在http{}块中添加:
lua_package_path "/path/to/your/lua/scripts/?.lua;;";
lua_log_level notice;
(lua_package_path指定脚本搜索路径,;;表示追加系统默认路径) - 在某个
location中测试嵌入逻辑,例如:
location /hello {
content_by_lua_block {
ngx.say("Hello from Lua!")
}
} - 重启 Nginx:
/usr/local/nginx/sbin/nginx -s reload,访问/hello应返回纯文本响应 - 若报错 “unknown directive ‘content_by_lua_block’”,说明模块未加载成功,需回查 configure 参数、LUAJIT 路径、make 日志中的 warning
不复杂但容易忽略:Nginx 源码集成 Lua 的本质是静态链接模块,每一步路径、版本、顺序都影响最终二进制是否携带 Lua 支持。跳过 LuaJIT 预编译或漏掉 --with-ld-opt,都可能导致运行时报 “symbol not found” 类错误。


















