欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Nginx 与 Lua:OpenResty 高并发网关开发实践

发表于:|最后更新:|分类:Linux与网络|阅读:2262 次
本文标签:NginxOpenRestyLua

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 间状态不一致。