Nginx的Lua支持通常通过ngx_lua模块实现,以下是几种安装方式:
OpenResty是一个集成了Nginx、LuaJIT和许多有用模块的完整包:
# Ubuntu/Debian
sudo apt-get install -y software-properties-common
sudo add-apt-repository -y ppa:openresty/ppa
sudo apt-get update
sudo apt-get install -y openresty
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo
sudo yum install -y openresty
如果你使用标准Nginx,需要手动编译ngx_lua模块:
# 安装依赖
sudo apt-get install -y libpcre3-dev libssl-dev perl make build-essential curl
sudo apt-get install -y zlib1g-dev
# 下载LuaJIT
wget https://github.com/openresty/luajit2/archive/v2.1-20230410.tar.gz
tar xvf v2.1-20230410.tar.gz
cd luajit2-2.1-20230410
make && sudo make install
# 下载ngx_lua模块
wget https://github.com/openresty/lua-nginx-module/archive/v0.10.23.tar.gz
tar xvf v0.10.23.tar.gz
# 下载Nginx
wget https://nginx.org/download/nginx-1.23.4.tar.gz
tar xvf nginx-1.23.4.tar.gz
cd nginx-1.23.4
# 编译安装
./configure --prefix=/usr/local/nginx \
--with-ld-opt="-Wl,-rpath,/usr/local/lib" \
--add-module=../lua-nginx-module-0.10.23
make
sudo make install
在Nginx配置文件中添加Lua支持:
http {
lua_package_path '/usr/local/lib/lua/?.lua;;';
lua_package_cpath '/usr/local/lib/lua/?.so;;';
server {
listen 80;
server_name localhost;
location /lua {
default_type 'text/plain';
content_by_lua_block {
ngx.say("Hello, Lua!")
}
}
location /file {
default_type 'text/plain';
content_by_lua_file /path/to/your/lua/script.lua;
}
}
}
Nginx提供了多个Lua相关指令:
content_by_lua
/ content_by_lua_block
/ content_by_lua_file
- 处理请求内容rewrite_by_lua
- 重写阶段执行Lua代码access_by_lua
- 访问控制阶段执行Lua代码header_filter_by_lua
- 处理响应头body_filter_by_lua
- 处理响应体log_by_lua
- 日志阶段执行Lua代码location /secure {
access_by_lua_block {
local token = ngx.var.arg_token
if token ~= "secret123" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
# 其他配置...
}
location ~ ^/user/(\d+) {
set $user_id $1;
content_by_lua_file /path/to/user_info.lua;
}
对应的user_info.lua
文件:
local user_id = ngx.var.user_id
-- 查询数据库或缓存获取用户信息
ngx.say("User ID: ", user_id)
创建测试配置文件后,重启Nginx并访问测试:
sudo nginx -t # 测试配置
sudo nginx -s reload # 重新加载配置
curl http://localhost/lua # 应该返回"Hello, Lua!"
通过以上步骤,你应该已经成功为Nginx配置了Lua支持。