下面这个图是 ngx_lua 各个指令的执行顺序。
执行阶段说明:
set_by_lua*: 流程分支处理判断变量初始化
rewrite_by_lua*: 转发、重定向、缓存等功能(例如特定请求代理到外网)
access_by_lua*: IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙)
content_by_lua*: 内容生成
header_filter_by_lua*: 响应头部过滤处理(例如添加头部信息)
body_filter_by_lua*: 响应体过滤处理(例如完成应答内容统一成大写)
log_by_lua*: 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)
由于 Nginx 把一个请求分成了很多阶段,这样第三方模块就可以根据自己行为,挂载到不同阶段进行处理达到目的。不同的阶段,有不同的处理行为,理解了他,也能更好的理解 Nginx 的设计思维。
总结与自学1、如何自学
《OpenResty最佳实践》
2、遇到问题怎么办
1) 看 nginx 的error.log
2) 疑难问题把可复现信息在官方邮件组里反馈
3) 善用Google
4) QQ交流群
1、OpenResty® - 中文官方站
https://openresty.org/cn/
2、openresty/lua-nginx-module: Embed the Power of Lua into NGINX HTTP servers
3、FFI Library
4、luajit FFI简单使用(1) - Abel's Blog - CSDN博客
https://blog.csdn.net/erlang_hell/article/details/52836467
5、OpenResty最佳实践
https://moonbingbing.gitbooks.io/openresty-best-practices/