教程 nginx tutorial

Lua 与动态配置 (OpenResty)

通过 OpenResty,Nginx 可以嵌入 Lua 脚本,实现高性能的动态配置和业务逻辑处理。

一、OpenResty 安装

bash
sudo apt-get install openresty

`

  • OpenResty 是 Nginx 的增强版本,内置 LuaJIT 与常用 Lua 模块

二、Lua 基础使用

nginx
server {
    listen 80;

    location /hello {
        content_by_lua_block {
            ngx.say("Hello, OpenResty!")
        }
    }
}
  • content_by_lua_block:直接在 Nginx 配置中编写 Lua 逻辑
  • ngx.say():输出响应内容

三、动态路由与配置

nginx
location /api/ {
    access_by_lua_block {
        local uri = ngx.var.uri
        if uri == "/api/v1" then
            ngx.var.target = "backend_v1"
        else
            ngx.var.target = "backend_v2"
        end
    }
    proxy_pass http://$target;
}
  • 利用 Lua 动态修改请求路由
  • 支持根据业务逻辑动态分配请求

四、缓存与性能优化

nginx
lua_shared_dict my_cache 10m;

access_by_lua_block {
    local cache = ngx.shared.my_cache
    local value = cache:get("key")
    if not value then
        value = "computed_value"
        cache:set("key", value, 60)
    end
    ngx.say(value)
}
  • lua_shared_dict:共享内存缓存
  • 减少后端计算和 I/O,提高吞吐量

五、最佳实践

  1. 避免在 Lua 脚本中做长时间阻塞操作
  2. 使用共享内存和定期过期机制优化缓存
  3. 结合 Nginx 缓存、Gzip、负载均衡提高性能
  4. 使用 OpenResty 提供的库扩展功能,如 resty.redis、resty.http

通过 Lua 与 OpenResty,Nginx 可以实现高度灵活的动态配置和业务逻辑处理,支持高性能 Web 服务扩展。