一、为啥要给Nginx“编程”?——从“静态大叔”到“灵活小伙”的进化
以前咱们用Nginx,多半是让它干点“体力活”:反向代理、负载均衡、静态文件服务……配置全靠改nginx.conf,改完还得nginx -s reload。每次修改都得重启,麻烦不说,遇到要动态判断的请求(比如根据用户身份返回不同内容),传统Nginx直接懵圈——它就是个“静态配置执行器”,没条件判断、没循环、没变量计算能力。
这时候,OpenResty 来了!它把Nginx核心、LuaJIT(超快的Lua编译器)、一堆实用模块打包在一起,相当于给Nginx内置了一个轻量级的编程引擎。而这个引擎用的语言,就是Lua。
为啥选Lua?这语言天生适合“嵌入”:
- 语法简单,学起来快;
- 跑在LuaJIT上,速度接近C;
- 和Nginx的“事件驱动”模型完美融合,不阻塞网络。
简单说,OpenResty = Nginx + Lua编程能力。从此,Nginx不用动不动找后端帮忙,自己就能处理复杂逻辑,变身“全能网关”。
二、Lua语言极速入门——写给着急开工的你
如果你写过Python或JavaScript,Lua学起来就是几分钟的事。看个对比:
-- 变量(默认全局,局部加 local)
local name = "老王"
local score = 99.5
local is_pass = true
-- 表(table,万用数据结构)
local user = { name = "小明", age = 28 }
print(user["name"]) -- 小明
print(user.name) -- 也是小明
-- 数组也是表
local colors = { "红", "绿", "蓝" }
print(colors[1]) -- 红
-- 条件判断
if score >= 90 then
print("学霸")
elseif score >= 60 then
print("及格")
else
print("兄弟得加油啊")
end
-- 循环
for i = 1, 5 do
print("卷起来 " .. i) -- .. 是字符串连接
end
-- 函数
function greet(who)
return "你好, " .. who .. "!"
end
print(greet("程序员"))
是不是感觉像JavaScript的亲戚?特别提醒:数组下标从1开始,别手滑写成0!
三、OpenResty核心概念:Lua如何“钩”进Nginx
OpenResty通过一系列“***_by_lua”指令,把Lua代码注入Nginx处理流程的不同阶段。常用阶段:
- init_by_lua:Nginx启动时执行,适合加载全局配置、初始化库。
- set_by_lua:计算变量值,比如把请求参数转成数字。
- rewrite_by_lua:改写请求URI、跳转等,类似
rewrite阶段。 - access_by_lua

最低0.47元/天 解锁文章
1325

被折叠的 条评论
为什么被折叠?



