插件窝 干货文章 Nginx怎么安装配置Lua支持

Nginx怎么安装配置Lua支持

Lua Nginx OpenResty sudo 983    来源:    2025-04-21

Nginx安装配置Lua支持指南

一、安装Lua支持

Nginx的Lua支持通常通过ngx_lua模块实现,以下是几种安装方式:

1. 使用OpenResty(推荐)

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

2. 单独编译ngx_lua模块

如果你使用标准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;
        }
    }
}

三、常用Lua指令

Nginx提供了多个Lua相关指令:

  1. content_by_lua / content_by_lua_block / content_by_lua_file - 处理请求内容
  2. rewrite_by_lua - 重写阶段执行Lua代码
  3. access_by_lua - 访问控制阶段执行Lua代码
  4. header_filter_by_lua - 处理响应头
  5. body_filter_by_lua - 处理响应体
  6. log_by_lua - 日志阶段执行Lua代码

四、示例应用

1. 简单的访问控制

location /secure {
    access_by_lua_block {
        local token = ngx.var.arg_token
        if token ~= "secret123" then
            ngx.exit(ngx.HTTP_FORBIDDEN)
        end
    }
    # 其他配置...
}

2. 动态路由

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)

五、注意事项

  1. Lua代码执行会阻塞Nginx worker进程,避免长时间运行的Lua操作
  2. 对于复杂业务逻辑,考虑使用OpenResty提供的cosocket进行非阻塞IO操作
  3. 生产环境建议使用LuaJIT以获得更好的性能
  4. 注意Lua代码的安全性,防止代码注入

六、验证安装

创建测试配置文件后,重启Nginx并访问测试:

sudo nginx -t  # 测试配置
sudo nginx -s reload  # 重新加载配置
curl http://localhost/lua  # 应该返回"Hello, Lua!"

通过以上步骤,你应该已经成功为Nginx配置了Lua支持。