# Lua 与动态配置 (OpenResty)

URL: https://caijiao.org/nginx/openresty
Source: docs/nginx/openresty.md
Description: 本节介绍 Nginx 使用 Lua 和 OpenResty 实现动态配置和业务逻辑扩展，包括 Lua 模块、动态路由、缓存与性能优化。

通过 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 服务扩展。
