# ============================================================
# Nginx Lua 基础配置示例
# ============================================================
#
# 功能说明:
# - lua-nginx-module 基础用法
# - init_by_lua 初始化
# - 变量和共享字典
#
# Lolly 对应配置:
# lolly 内置 Lua 沙箱支持，可通过配置嵌入 Lua 脚本
# 相关文档: docs/lua-nginx-module/
# ============================================================

# nginx.conf 主配置
http {
    # Lua 共享字典定义
    # 用于跨请求共享数据
    lua_shared_dict cache 10m;      # 缓存字典
    lua_shared_dict limits 5m;      # 限流计数
    lua_shared_dict sessions 10m;   # 会话存储

    # Lua 模块搜索路径
    lua_package_path "/usr/local/nginx/lua/?.lua;;";
    lua_package_cpath "/usr/local/nginx/lua/?.so;;";

    # 初始化阶段（master 进程）
    # Lolly 对应: init 阶段执行 Lua
    init_by_lua_block {
        -- 加载全局模块
        local config = require "config"

        -- 初始化全局变量
        _G.app_version = "1.0.0"

        -- 预编译正则表达式
        _G.patterns = {
            email = ngx.re.compile([[^[\w.+-]+@[\w.-]+\.[\w]+$]]),
            phone = ngx.re.compile([[^\d{10,15}$]]),
        }

        ngx.log(ngx.INFO, "Lua initialization complete")
    }

    # Worker 初始化
    init_worker_by_lua_block {
        -- 启动后台定时任务
        local timer = require "timer"
        timer.start_polling()
    }

    server {
        listen 80;
        server_name lua.example.com;

        location / {
            root /var/www/html;
        }
    }
}

# Lua 阶段说明:
#
# 1. init_by_lua:
#    - master 进程加载配置时执行
#    - 用于全局初始化
#    - 预编译正则、加载模块
#
# 2. init_worker_by_lua:
#    - 每个 worker 进程启动时执行
#    - 用于 worker 级初始化
#    - 启动定时器、后台任务
#
# 3. set_by_lua:
#    - 设置变量
#    - 可用于复杂计算
#
# 4. rewrite_by_lua:
#    - URL 重写阶段
#    - 可实现复杂重写逻辑
#
# 5. access_by_lua:
#    - 访问控制阶段
#    - 认证、授权
#
# 6. content_by_lua:
#    - 内容生成阶段
#    - 动态响应生成
#
# 7. header_filter_by_lua:
#    - 响应头处理
#    - 修改响应头
#
# 8. body_filter_by_lua:
#    - 响应体处理
#    - 修改响应内容
#
# 9. log_by_lua:
#    - 日志阶段
#    - 自定义日志记录