Lua脚本#
这里有一份lua快速入门,不够详细,不够全面.但是可以快速扫一眼lua的风格,也可以大概速查一下
Openresty快速入门#
Openresty是一个华人章亦春主导发起的开源项目,将lua的灵活性注入nginx,利用高性能为nginx带来更多的想象空间.官方定义是
Openresty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
这里有一个360的工程师写的比较友好的入门资料<<OpenResty 最佳实践>>
https://moonbingbing.gitbooks.io/openresty-best-practices/content/
下面摘录一些可以快速入门的东西
Openresty引入lua#
openresty中nginx引入lua方式
-
xxx_by_lua —>字符串编写方式,不建议使用
-
xxx_by_lua_block ---->代码块方式,可以少量lua脚本的时候使用
-
xxx_by_lua_file ---->直接引用一个lua脚本文件,大量复杂逻辑的时候使用
xxx是如:
7个阶段的执行顺序如下:
- set_by_lua: 流程分支判断,判断变量初始哈
- rewrite_by_lua: 用lua脚本实现nginx rewrite
- access_by_lua: ip准入,是否能合法性访问,防火墙
- content_by_lua: 内容生成
- header_filter_by_lua:过滤http头信息,增加头信息
- body_filter_by_lua: 内容大小写,内容加密
- log_by_lua: 本地/远程记录日志
这是openresty官方给的最简单的一个例子,openresty使用content_by_lua_block
后面可以直接在{}
中写lua脚本、也可以用content_by_lua_file /path/to/luafile.lua
在一个单独的lua文件中处理.
1 | http { |
可以分阶段处理,如利用 access 阶段做一些非标准 HTTP(S)上的自定义修改,但对于已有业务是不需要任何感知的。
如api版本升级,新增加密\防篡改,调用方升级太多的时候可以用openresty去兼容老版本.真正的业务在content_by_lua_file
中完成,应用只用维护一个新版即可.
1 | location ~ ^/api/([-_a-zA-Z0-9/]+).json { |
引用第三方库#
我们以 resty.http
( pintsized/lua-resty-http) 库为例。
只要将 lua-resty-http/lib/resty/
目录下的 http.lua 和 http_headers.lua 两个文件拷贝到 /usr/local/openresty/lualib/resty
目录下即可(假设你的 OpenResty 安装目录为 /usr/local/openresty
)。
放在其他地方的话,需要指定一下扫描路径
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx_lua/how_use_third_lib.html
cosocket#
coroutine协程+socket
https://moonbingbing.gitbooks.io/openresty-best-practices/content/ngx_lua/whats_cosocket.html
TIME_WAIT#
https://moonbingbing.gitbooks.io/openresty-best-practices/content/web/time_wait.html
灰度发布#
其实就是openresty根据redis里面的ip范围,将某些用户的响应给代理到新的服务上.
https://moonbingbing.gitbooks.io/openresty-best-practices/content/test/abtest.html
redis连接#
https://moonbingbing.gitbooks.io/openresty-best-practices/content/web/conn_pool.html
C10K#
https://moonbingbing.gitbooks.io/openresty-best-practices/content/web/c10k.html