最近参与一个网关类项目,底层是使用 OpenResty 写的,所以找了很多资料强补了 OpenResty 相关的知识。现在把一些资料汇总一下,方便自己也方便其他有需要的学习者能快速进入学习状态。
我会先从官方文档开始整理,因为官方文档上的内容总是更加权威的,一般的疑问查官方文档就解决了。然后我会整理下现在比较好的一些书或者是课程,这些教程对OpenResty会有更系统的介绍,方便入门和进阶。
官网
OpenResty中文官方站
可以让你对OpenResty有一个初步的了解,可以通过“安装”和“开始上路”搭建起一个Demo,初步了解使用。
官方文档
OpenResty是一款基于 NGINX 和 LuaJIT 的 Web 平台。
它的核心是基于 NGINX 的一个 C 模块(lua-nginx-module),该模块将 LuaJIT 嵌入到 NGINX 服务器中,并对外提供一套完整的 Lua API,透明地支持非阻塞 I/O,提供了轻量级线程、定时器等高级抽象。同时,围绕这个模块,OpenResty 构建了一套完备的测试框架、调试技术以及由 Lua 实现的周边功能库。
在正式开发前,需要一定的 NGINX 和 LuaJIT 基础知识。
NGINX
Nginx 是 OpenResty 的核心。
Nginx官方文档
有非常详细的说明,但是我看的最多的是 Modules reference 这一块内容,当有指令的用法不清晰时,就到官方文档上确认一下,有点类似于查字典。
读英文吃力的话,也可以先读下
Nginx中文文档
,里面“配置文档”对初学者来说还是比较友好的。
进阶者可以看下
Nginx开发文档
,对Nginx的常见结构体和API有比较详细的说明,如果你开始看OpenResty 的C语言源码,这里的内容肯定用得上。
LuaJIT
LuaJIT是Lua编程语言的即时编译器(Just-In-Time Compiler)。LuaJIT 的语法兼容 Lua 5.1,并对 Lua 5.2 和 5.3 做了选择性支持。
Lua 5.1参考手册
对Lua语言进行了官方的定义。
《Programming in Lua》
是官方推荐的一本书,对Lua做了比较全面的介绍,在链接里我放了两本中文版,是不同的组织翻译的。提取码:5jgq。
LuaJIT extentions
:介绍了LuaJIT的一些拓展,进阶的时候FFI相关内容要仔细看下,初学者可以先略过。
OpenResty
OpenResty 在API 文档这一块是做的很不错的,基本上你可以在每个项目的 ReadMe 上找到指令或方法的说明、示例和注意点。
打开 OpenResty 在 GitHub 上的
项目主页
,目前总共有69公开的项目。最主要的是以下两类:
-
NGINX C 模块
以 *-nginx-module命名的就是 NGINX 的 C 模块。总共有20多个,有部分是早期使用的,引入了新的技术后,目前已经不推荐使用了。
最核心的是以下两个:
lua-nginx-module
和
stream-lua-nginx-module
,前者用来处理七层流量,后者用来处理四层流量。 -
lua-resty- 周边库
以 lua-resty-*开头的是官方自带的周边库,如果个人要贡献第三方库,也是同样的命名规范。其中最主要的是
lua-resty-core
,这是个纯粹的Lua 库,使用LuaJIT FFI重新实现了ngx_lua模块的一部分Lua Nginx API,比原来的C模块性能要高上许多。
其他教程
1、
OpenResty最佳实践
:由 OpenResty 软件基金会主席-温铭主导维护的一个教程,初学者必看,讲的也是比较基础的一些知识点。
2、
OpenResty 从入门到实战
:温铭在极客时间的专栏,讲的内容很丰富,可以作为从入门到进阶的一个教程。
3、
agentzh 的 Nginx 教程
:OpenResty 作者章亦春写的 Nginx 教程,目前还处于连载状态。
4、
深入理解Nginx-模块开发与架构解析-第2版
:这本书是进阶书籍,主要讲的是如何用Nginx进行模块开发。看完之后会对Nginx的整个架构设计、请求处理流程、内存管理等等有更深入的认识。
5、
Nginx核心知识100讲
:《深入理解Nginx》的作者陶辉在极客时间上的专栏,我没阅读过,不好评价,有兴趣的可以关注下。
6、
OpenResty博客
:官方博客,现在内容还比较少,但有几篇硬干货。
7、
OpenRestyCon 2018
:OpenResty 官方组织的分享大会,有很多企业级的实战分享,可以看录播视频和PPT,网上也有一些文字版的,大家自己去搜下好了。
8、
知乎OpenResty话题
:现在OpenResty的社区没有很强大,知乎这个话题的精华文章里有很多不错的回答,是一个了解社区比较好的途径。
开源项目
现在已经有基于 OpenResty 的比较成熟的 Api 网关项目。可以看看他们的文档,了解一下开源项目是怎么利用OpenResty来提供解决方案的。
Kong
是一个云原生,快速,可扩展的分布式微服务抽象层(也称为API网关或API中间件)。它的核心价值是高性能和可扩展性,于2015年作为一个开源项目提供。
Orange
是基于OpenResty(Nginx + Lua)的API监视和管理网关。
Apache APISIX
是基于Nginx库和etcd的动态,实时,高性能API网关。