lua-nginx-module 是 OpenResty 的核心接口层。它提供三样东西:
#1. 指令入口:把 Lua 挂到 Nginx 配置里
典型形式:
init_by_lua_blockrewrite_by_lua_blockaccess_by_lua_blockcontent_by_lua_blockheader_filter_by_lua_blocklog_by_lua_block
这意味着:Nginx 配置文件不再只是声明式规则表,而是可以在关键工位执行 Lua 程序。
#2. ngx API:Lua 和 Nginx 世界的桥
你在 Lua 里通过 ngx 干活,比如:
ngx.req.get_headers()ngx.var.xxxngx.say()ngx.exit()ngx.shared.DICTngx.location.capture()ngx.timer.at()
它就像工厂中控台的操作面板。
#3. cosocket + subrequest:高并发魔法源头
这是最核心的两个武器。
#cosocket
用协程友好的方式做网络 I/O:
- Redis
- MySQL
- PostgreSQL
- HTTP
- DNS
- TCP/Unix Socket
#subrequest
向 Nginx 内部 location 发起非阻塞“内部子请求”。
你可以把它理解成:
- cosocket:去厂外联系外部供应商
- subrequest:在厂内调用其他车间协作
#一个最小示例
worker_processes auto;
events {
worker_connections 4096;
}
http {
lua_package_path "lua/?.lua;;";
lua_shared_dict counters 10m;
init_by_lua_block {
require("bootstrap").init()
}
server {
listen 8080;
location /hello {
content_by_lua_block {
ngx.say("hello from openresty")
}
}
}
}lua/bootstrap.lua:
local _M = {}
function _M.init()
ngx.log(ngx.NOTICE, "bootstrap loaded")
end
return _M这个例子很小,但已经暴露出 OpenResty 的本质:
Nginx 配置负责摆工位,Lua 代码负责定义工位动作。