为什么 Nginx 开发者需要学 OpenResty?
很多运维和后端同学精通 Nginx 配置,但面对动态逻辑需求时,往往只能求助于上游服务,导致请求链路冗长、延迟增加。这门课解决的核心痛点,正是**如何在 Nginx 层面实现高性能的动态业务逻辑**。它不是让你重新学习一种复杂的通用编程语言,而是教你利用 OpenResty 将 Lua 脚本嵌入 Nginx,把原本需要多次网络交互的复杂判断(如限流、鉴权、动态路由)下沉到网关层直接处理。对于正在备考高级后端或致力于提升系统架构能力的人来说,这是填补“高性能网关开发”能力缺口的一块关键拼图。
前置基础与学习路径建议
本课程适合**已经熟悉 Nginx 基本配置、了解 HTTP 协议,并具备一定 Lua 或类 C 语言基础**的学习者。如果你完全没接触过 Nginx 的生命周期概念,或者对 Lua 语法陌生,建议先快速补一下这两个基础模块。
进入课程后,建议按以下顺序突破:
1. **开篇与特性篇**:先理解 OpenResty 的三大核心特性,建立对“事件驱动 + Lua 嵌入”架构的整体认知,不要急于写代码。
2. **环境与实践篇**:重点看“初探 OpenResty”和“Hello World”,配合资料包中的本地环境搭建步骤,确保你的开发环境能跑起来。这里会涉及 luarocks 和 opm 包管理工具的使用,是后续开发第三方库的基础,务必搞懂版本冲突的处理逻辑。
3. **深度原理篇**:这是最难啃但也最有价值的部分。深入研读“Nginx 知识回顾”、“LuaJIT 分支差异”以及“table 和 metatable 剖析”。特别是关于 JIT 编译器局限性和 NYI(Not Yet Implemented)陷阱的章节,直接决定了你写出的脚本是否真正高效且稳定。
学完能独立做什么?
完成本门课程后,你将能够**独立设计并部署基于 OpenResty 的高性能中间件服务**。具体而言,你可以:
- 编写自定义的 Nginx 模块逻辑,实现细粒度的访问控制、A/B 测试流量分发或实时日志分析。
- 熟练运用 LuaJIT 特性优化热点代码,规避常见的性能陷阱,写出比标准 Nginx + 上游服务架构更低的延迟方案。
- 独立管理第三方 Lua 库(如 redis、mysql 客户端),解决依赖冲突问题。
课程配套的练习资料建议“边看边敲”。尤其是涉及 FFmpeg 集成或复杂 Lua 数据结构的实战环节,不要只看不练。OpenResty 的回调机制和异步模型只有在你亲手调试过几次请求上下文丢失或超时错误后,才能真正内化为肌肉记忆。
课程目录
开篇词 (1讲)
- 开篇词 _ OpenResty,为你打开高性能开发的大门
入门篇 (14讲)
- 01 _ 初探OpenResty的三大特性
- 02 _ 如何写出你的“hello world”?
- 03 _ 揪出隐藏在背后的那些子项目
- 04 _ 如何管理第三方包?从包管理工具luarocks和opm说起
- 05 _ [视频]opm项目导读
- 06 _ OpenResty 中用到的 NGINX 知识
- 07 _ 带你快速上手 Lua
- 08 _ LuaJIT分支和标准Lua有什么不同?
- 09 _ 为什么 lua-resty-core 性能更高一些?
- 10 _ JIT编译器的死穴:为什么要避免使用 NYI ?
- 11 _ 剖析Lua唯一的数据结构table和metatable特性
- 12 _ 高手秘诀:识别Lua的独有概念和坑
- 13 _ [视频]实战:基于FFI实现的lua-resty-lrucache
- 14 _ 答疑(一):Lua 规则和 NGINX 配置文件产生冲突怎么办?
API篇 (11讲)
- 15 _ OpenResty 和别的开发平台有什么不同?
- 16 _ 秒杀大多数开发问题的两个利器:文档和测试案例
- 17 _ 为什么能成为更好的Web服务器?动态处理请求和响应是关键
- 18 _ worker间的通信法宝:最重要的数据结构之shared dict
- 19 _ OpenResty 的核心和精髓:cosocket
- 20 _ 超越 Web 服务器:特权进程和定时任务
- 21 _ 带你玩转时间、正则表达式等常用API
- 22 _ [视频]从一个安全漏洞说起,探寻API性能和安全的平衡
- 23 _ [视频]导读lua-resty-requests:优秀的lua-resty-_是如何编写的?
- 24 _ 实战:处理四层流量,实现Memcached Server
- 25 _ 答疑(二):特权进程的权限到底是什么?
测试篇 (5讲)
- 26 _ 代码贡献者的拦路虎:test__nginx 简介
- 27 _ test__nginx 包罗万象的测试方法
- 28 _ test__nginx 还可以这样用?
- 29 _ 最容易失准的性能测试?你需要压测工具界的“悍马”wrk
- 30 _ 答疑(三)如何搭建测试的网络结构?
性能优化篇 (16讲)
- 31 _ 性能下降10倍的真凶:阻塞函数
- 32 _ 让人又恨又爱的字符串操作
- 33 _ 性能提升10倍的秘诀:必须用好 table
- 34 _ 特别放送:OpenResty编码指南
- 35 _ [视频]实际项目中的性能优化:ingress-nginx中的几个PR解读
- 36 _ 盘点OpenResty的各种调试手段
- 37 _ systemtap-toolkit和stapxx:如何用数据搞定“疑难杂症”?
- 38 _ [视频]巧用wrk和火焰图,科学定位性能瓶颈
- 39 _ 高性能的关键:shared dict 缓存和 lru 缓存
- 40 _ 缓存与风暴并存,谁说缓存风暴不可避免?
- 41 _ lua-resty-_ 封装,让你远离多级缓存之痛
- 42 _ 如何应对突发流量:漏桶和令牌桶的概念
- 43 _ 灵活实现动态限流限速,其实没有那么难
- 44 _ OpenResty 的杀手锏:动态
- 45 _ 不得不提的能力外延:OpenResty常用的第三方库
- 46 _ 答疑(四):共享字典的缓存是必须的吗?
API网关篇 (4讲)
- 47 _ 微服务API网关搭建三步曲(一)
- 48 _ 微服务API网关搭建三步曲(二)
- 49 _ 微服务API网关搭建三步曲(三)
- 50 _ 答疑(五):如何在工作中引入 OpenResty?
结束语 (1讲)
- 结束语 _ 行百里者半九十





