OpenResty 将 LuaJIT 嵌入 Nginx,使开发者能够在请求处理各阶段执行自定义逻辑,构建高性能 API 网关。
一、请求处理阶段
Nginx 将请求生命周期划分为多个阶段,常用 Lua 钩子包括:
init_by_lua_block:master 进程启动时执行access_by_lua_block:访问控制与鉴权content_by_lua_block:生成响应内容log_by_lua_block:日志采集
二、限流示例
nginx
location /api/ {
access_by_lua_block {
local limit = require "resty.limit.req"
local lim = limit.new("my_limit", 100, 50)
local key = ngx.var.binary_remote_addr
local delay, err = lim:incoming(key, true)
if not delay then
ngx.exit(503)
end
}
proxy_pass http://backend;
}基于共享内存字典(lua_shared_dict)实现分布式限流,避免多 worker 间状态不一致。